django_celery_beat是否支持多分钟/小时的crontab计划?

时间:2017-11-24 07:49:27

标签: python django celery django-celery

我正在使用django-celeryhttps://pypi.python.org/pypi/django-celery/)在数据库中存储芹菜节拍(周期性任务)时间表。但它不支持版本3.1.25之外的芹菜。我想转到芹菜4.1.0,所以我正在考虑转移到django-celery-beathttps://pypi.python.org/pypi/django_celery_beat)基于数据库的计划。

我能够成功地将表结构与数据一起迁移。但是,我看到django-celery-beat不支持crontab日程安排,而djcelery支持多个分钟和小时。

例如,请考虑此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的问题?

由于

1 个答案:

答案 0 :(得分:0)

您能否确认完全如何为数据库指定列表值?

我发现这样的列表似乎有效:' 5,10,15'。例如,我有一个如下所示的计划:

  

0,4,8,12,16,20,24,28,32,36,40,44,48,52,56 * * * 1,2,3,4,5,6,7,8 ,9,10,11,12(m / h / d / dM / MY)

这是与django-celery-beat == 1.1.0,celery == 4.1.0和Django == 2.0.1。确切地说,我从一个名为schedule的celery.schedule.crontab对象构造了如下调用:

crontab = {}
for attr in ['minute', 'hour', 'day_of_week', 'day_of_month', 'month_of_year']:
    crontab[attr] = str(list(getattr(schedule, attr)))[1:-1]
self.object.schedule = CrontabSchedule.objects.create(**crontab)

然而,我要提交一个错误,因为用于存储日期的数据库字段长度为64个字符,这对于最坏情况下的情况来说太短了,即1,2,3,4 ,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29 ,30,31和#39;这是没有空格的83个字符或113个字符。