如何使python apscheduler在类实例中触发一个函数

时间:2018-04-20 14:59:20

标签: apscheduler

我有一个类,它将BaseScheduler作为属性,没有任何花哨,没有框架等。

class MyClass(object):

    def __init__(self, ...):
       ...
       self.Scheduler = BackgroundScheduler()
       ...

稍后我定义了以下方法:a)根据作为kwargs传递的计划定义来计划作业,以及b)在触发作业时处理作业:

def _schedule_Events(self, *args, **kwargs):        
    try:
        Schedule_Def = kwargs.copy()
        Schedule_Def['func'] = self._handle_scheduled_Event
        job = self.Scheduler.add_job(**Schedule_Def)
        self.Scheduled_Events.append(job)
    except Exception as e:
        self.Logger.exception('%s: exception in schedule_Events, details: %s' %(self.Name, e))    

def _handle_scheduled_Event(self, Event_Action):
    """ Callback function for scheduled jobs """
    try:
        .... do stuff ....

但是,使用_schedule_Events添加作业时会失败:

  File "/usr/local/lib/python3.4/dist-packages/apscheduler/util.py", line 381, in check_callable_args
    ', '.join(unsatisfied_args))
ValueError: The following arguments have not been supplied: Event_Action

原因显然是'func'参数必须是全局可调用的,即。不在类实例范围内。我也没有看到如何使用文档中描述的“文本引用”将有所帮助。

如果我用模块级别定义的函数替换'func'可调用,那么它可以工作,但我需要让它调用我的实例对象中的方法。任何想法如何使这项工作?定制触发器?将APS Scheduler包装在另一个类中并传递回调?其他想法?

非常感谢提前。

0 个答案:

没有答案