【发布时间】:2023-04-04 20:14:02
【问题描述】:
使用 Celery ver.3.1.23,我正在尝试将计划任务动态添加到 celery beat。我有一个 celery worker 和一个 celery beat 实例正在运行。
运行 task.delay() 触发标准 celery 任务可以正常工作。当我将计划定期任务定义为配置中的设置时,celery beat 会运行它。
但是,我需要的是能够在运行时添加在指定 crontab 上运行的任务。将任务添加到持久调度程序后,celery beat 似乎没有检测到新添加的新任务。我可以看到 celery-schedule 文件确实有一个包含新任务的条目。
代码:
scheduler = PersistentScheduler(app=current_app, schedule_filename='celerybeat-schedule')
scheduler.add(name="adder",
task="app.tasks.add",
schedule=crontab(minute='*/1'),
args=(1,2))
scheduler.close()
当我跑步时:
print(scheduler.schedule)
我明白了:
{'celery.backend_cleanup': <Entry: celery.backend_cleanup celery.backend_cleanup() <crontab: 0 4 * * * (m/h/d/dM/MY)>,
'adder': <Entry: adder app.tasks.add(1, 2) <crontab: */1 * * * * (m/h/d/dM/MY)>}
注意 app.tasks.add 有 @celery.task 装饰器。
【问题讨论】:
标签: python python-3.x celery celerybeat