我正在尝试在Celery的运行时安排定期任务。
这是一个相关的older question。该问题中的One of the answers提到,自Celery版本4.1.0(我正在使用4.3.0)以来,现在可以在运行时添加任务,但是我无法实现。
我正在芹菜节拍运行时(甚至当它不运行时)修改搁置数据库。这是执行此操作的代码:
import shelve
from celery.beat import ScheduleEntry
from celery.schedules import schedule
s = schedule(5, app=app)
entry = ScheduleEntry("Test Task", "proj.tasks.my_task", args=("arg1", "arg2"), schedule=s)
db = shelve.open("celerybeat-schedule", writeback=True)
db["entries"]["Test Task"] = entry
db.close()
已成功将其存储在搁置文件中。这是搁置文件的entries
字段:
{'Test Task': <ScheduleEntry: Test Task proj.tasks.my_task('arg1', 'arg2') <freq: 5.00 seconds>}
但是当芹菜拍打开始时,它会覆盖此文件,并使entries
字段为空的dict
。我想念什么吗?还是不使用Django或类似的调度程序就不可能?
答案 0 :(得分:0)
事实证明,这仍然是不可能的。我转而使用celerybeat-mongo,它可以方便地将所有计划存储在Mongo集合中,并且还可以从可能由其他进程插入的同一集合中加载。