如何在 Django 项目中使用 Celery 4.4.6 crontab 计划

How to use Celery 4.4.6 crontab schedules within a Django project

我刚从 Celery 3.17 升级到 4.4.6。不幸的是,我在让节拍再次接收 crontab 任务时遇到了一些问题。我认为有些事情已经从根本上改变了,但不确定是什么。文档不容易剖析...

我过去常常将所有重复性任务放在一个方法中,然后将项目 settings.py 指向此时间表,如下所示: CELERYBEAT_SCHEDULE = CelerySchedule.celery_schedule

CelerySchedule 类似于:

从 celery.schedules 导入 crontab

""" 在这里查看:https://docs.celeryproject.org/en/stable/reference/celery.schedules.html """

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,我建议遵循 Upgrading from Celery 3.1 guide. Step 2 in the guide indicates that Celery 4 uses new setting names。例如,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,您的任务应 运行。