代码之家  ›  专栏  ›  技术社区  ›  Adalcar

任务是否可以使用APScheduler重新调度自己?

  •  0
  • Adalcar  · 技术社区  · 6 年前

    伪代码如下所示:

    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 ,它是包含调度程序的类,因此将导致相同的问题。

    0 回复  |  直到 6 年前