【发布时间】:2018-05-08 04:38:13
【问题描述】:
我正在使用django-celery (https://pypi.python.org/pypi/django-celery/) 在数据库中存储 celery beat(定期任务)时间表。但它不支持 celery 超过 3.1.25 版本。我想迁移到 celery 4.1.0,所以我正在考虑迁移到 django-celery-beat (https://pypi.python.org/pypi/django_celery_beat) 以获取基于 db 的时间表。
我能够成功迁移表结构以及数据。但是,我看到 django-celery-beat 不支持 djcelery 支持的多分钟和多小时的 crontab 计划。
例如,考虑这个 crontab 计划 - 15,30,45 0,1 * * *
任务将在每天 12:15、12:30、12:45、1:15、1:30、1:45 运行。这曾经在 django-celery 中工作。但在 django-celery-beat 中,它似乎只在 12:15 执行(第一次)。
旧设置 - Django==1.10, celery==3.1.24, django-celery==3.1.17
新设置 - Django==1.11.7, celery==4.1.0, django-celery-beat==1.1.0
谁能确认在 django-celery-beat 中是否已经放弃了对此类 crontab 计划的支持?如果它应该工作,是芹菜还是 django-celery-beat 的问题?
谢谢
【问题讨论】:
-
嗯...当您从数据库中提取它们时,您的列表中有这些还是什么?你用get_or_create吗?
-
@mutantkeyboard 这些是数据库中使用
django-celery创建的现有计划。我也尝试过创建新的,但不是用 get_or_create。我直接创建了一个CrontabSchedule对象并保存了它。如果我不使用 get_or_create 会有什么不同吗? -
所以我假设你有类似
app.conf.beat_schedule = { # Executes every Monday morning at 7:30 a.m. 'first-task': { 'task': 'tasks.add', 'schedule': crontab(hour=7, minute=30, day_of_week=1), 'args': (16, 16), }, 'second-task': { 'task': 'tasks.add', 'schedule': crontab(hour=12, minute=30, day_of_week=1), 'args': (16, 16), } }的东西,它应该是每个任务的字典集合。 -
@mutantkeyboard 不。如果我在数据库中存储时间表,为什么需要这样做?
-
@ksrini 你在运行 celery beat 并在命令中选择了调度程序类吗?
标签: python django celery django-celery