我刚刚从Celery 3.17升级到4.4.6。不幸的是,我在让crontab任务再次被节拍选中时遇到了一些问题。我认为有些事情已经发生了根本性的变化,但不确定是什么。这些文件不容易解剖。。。
我过去常常把我所有的重复任务放在一个方法中,然后把项目settings.py
指向这个时间表,如下所示:CELERYBEAT_SCHEDULE = CelerySchedule.celery_schedule
CelerySchedule看起来像:
从celery.schedules导入crontab
"quot"查看此处:https://docs.celeryproject.org/en/stable/reference/celery.schedules.html"quot">
class CelerySchedule():
celery_schedule_match = {
############# ADMIN #############
'upload-wee': {'task': 'exports.tasks.send_requests', 'schedule': crontab(hour=10, minute=30)},
'get_wee' :{'task': 'imports.tasks.get_data', 'schedule': crontab(hour=8, minute=30)},
但这似乎不再被阅读了?为什么会这样?我该怎么解决?
要升级到Celery 4,我建议遵循《从Celery 3.1升级》指南。指南中的步骤2表明Celery 4使用了新的设置名称。例如,CELERYBEAT_SCHEDULE
被重命名为beat_schedule
。
使用Django,您将希望继续使用大写的设置名称。运行以下命令自动将您的设置升级为新名称:
celery upgrade settings proj/settings.py --django
这也为您的设置添加了一个CELERY_
前缀,这样它们就不会与其他Django设置冲突。重新配置proj/celery.py
以指定此前缀:
app.config_from_object('django.conf:settings', namespace='CELERY')
您的定期任务设置现在应该称为CELERY_BEAT_SCHEDULE
,并且您的任务应该运行。