可以使用APScheduler重新安排任务本身吗?

时间:2018-11-15 12:23:06

标签: python-3.x scheduled-tasks apscheduler

我正在尝试设置一个延迟任务任务,该任务的时间取决于几个参数(传递给它还是从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生成新的连接一样?

0 个答案:

没有答案