Celery 允许通过向
app.conf.beat_schedule
添加条目来定义计划任务。一个例子(基于链接)
app.conf.beat_schedule = {
# Executes every Monday morning at 7:30 a.m.
'do-task-every-monday-morning': {
'task': 'tasks.monday_morning_task',
'schedule': crontab(hour=7, minute=30, day_of_week=1),
'args': (18, 24),
},
}
有没有办法在外部 JSON 文件中定义计划任务并将该文件加载到 Celery 中?例如,
{
"do-task-every-monday-morning": {
"task": "tasks.monday_morning_task",
"schedule": "30 7 * * 1",
"args": [18, 24]
},
"do-task-every-friday-afternoon": {
"task": "tasks.friday_afternoon_task",
"schedule": "30 14 * * 5"
}
}
如有任何帮助,我们将不胜感激。
提前致谢。
crontab(hour=7, minute=30, day_of_week=1),
部分是一个函数调用,所以你不能只用 JSON 编写它并解析 json 以使其在 Python 代码中工作。
您需要添加一个中间步骤,通过调用
"30 7 * * 1"
函数将计划语法 crontab
解析为一个值,然后在 schedule
键上设置该值。
对于
'args': (18, 24),
部分,您也会遇到类似的问题,因为 python 元组 (18, 24)
没有相应的 JSON,所以即使您在 JSON 文件中写入 [18, 24]
,您也必须使用自己的代码解释它并转换进入元组。
有人可能已经这样做了,因此值得在 Github 或其他地方搜索代码,但这并不是一项艰巨的实施工作。
在 celery 调度中转换字符串确实非常简单:
>>> from celery.schedules import crontab
>>> string = '0 0 * * *'
>>> crontab(*string.split())
<crontab: 0 0 * * * (m/h/dM/MY/d)>