Django celery任务,每天从00:00到02:00执行

时间:2019-01-27 15:56:40

标签: django celery django-celery

我需要设置django celery任务my_task,该任务每天从00:00到02:00间隔5分钟执行一次。似乎无法通过django-celery-beat在admin中设置此任务。如何正确设置?

我需要类似的东西

celery_app.conf.beat_schedule = {
    'my_task_1': {
        'task': 'tasks.my_task',
        'schedule': crontab(minute=5),
        'start': crontab(hour=0, minute=0),
        'expires': crontab(hour=2, minute=0),
        'args': (".."),
    },
}

谢谢您的时间。

2 个答案:

答案 0 :(得分:1)

Celery的crontab计划类接受完整的crontab语法,这可能有点难以理解。此配置应执行您想要的操作:

celery_app.conf.beat_schedule = {
    'my_task_1': {
        'task': 'tasks.my_task',
        'schedule': crontab(hour="0-1", minute="*/5"),
        'args': (".."),
    },
}

注意:不会在2:00运行任务。我认为最简单的方法是添加第二个时间表:

    'my_task_2am': {
        'task': 'tasks.my_task',
        'schedule': crontab(hour="2", minute="0"),
        'args': (".."),
    },

答案 1 :(得分:0)

您可以使用celerybeat任务运行,该任务将运行另一个celery任务并执行以下操作:

  1. 检查当前时间是否在00.00-02.00间隔
  2. 如果第1点是对的,请遵循你的逻辑
  3. 在5分钟内使用apply_async再次运行自己。

您将获得的结果是,在00.00时,您的celerebeat任务将运行,并启动您的另一个celerey任务,该任务将在逻辑之上执行直到02.00。