我有一个类,它将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包装在另一个类中并传递回调?其他想法?
非常感谢提前。