我正在使用Celery 4.3.0。我正在尝试根据json文件中的计划每5秒更新一次celery beat的计划,以便在我手动编辑,添加或删除json文件中的计划任务时,这些变化会被celery beat接收。调度程序而不重新启动它。
我尝试创建的任务是通过更新app.conf['CELERYBEAT_SCHEDULE']
来更新此计划。该任务每5秒成功运行一次,但是即使我将beat_max_loop_interval
设置为1秒,芹菜节拍也不会更新为新时间表。
tasks.py
from celery import Celery
app = Celery("tasks", backend='redis://', broker='redis://')
app.config_from_object('celeryconfig')
@app.task
def hello_world():
return "Hello World!"
@app.task
def update_schedule():
with open("path_to_scheduler.json", "r") as f:
app.conf['CELERYBEAT_SCHEDULE'] = json.load(f)
celeryconfig.py
beat_max_loop_interval = 1 # Maximum number of seconds beat can sleep between checking the schedule
beat_schedule = {
"greet-every-10-seconds": {
"task": "tasks.hello_world",
"schedule": 10.0
},
'update_schedule': {
'task': 'tasks.update_schedule',
'schedule': 5.0
},
}
schedule.json
{
"greet-every-2-seconds": {
"task": "tasks.hello_world",
"schedule": 2.0
},
"update_schedule": {
"task": "tasks.update_schedule",
"schedule": 5.0
}
}
任何帮助将不胜感激。如果您知道从文件中重新加载节拍时间表的更好方法,我也很想听听它。