我正在尝试设置一个延迟任务任务,该任务的时间取决于几个参数(传递给它还是从redis数据库获得)。
伪代码如下:
def main():
scheduler = BackgroundScheduler()
scheduler.add_job(delayed_task,
id=task_id,
next_run_time=somedate,
args=(task_id, some_data))
scheduler.start()
do_something_else()
def delayed_task(id, passed_data):
rd = connect_to_redis()
redis_data = rd.fetch_data(id)
publish_data(passed_data, redis_data)
updated_run_time = parse(redis_data)
#obtain a scheduler object here
scheduler.modify_job(id, next_run_time=updated_run_time)
问题如下:有没有办法从任务访问调度程序? 不能将调度程序作为参数传递给任务,因为这会引发
TypeError: can't pickle _thread.lock objects
出于相同的原因,我不能将所有这些都放在一个类中并将其称为方法,因为该方法的参数包括self
(这是包含调度程序的类),因此会导致同样的问题。
是否可以从外部重新获得调度程序的实例,就像我可以为redis生成新的连接一样?