芹菜如何立即执行周期性任务?

时间:2017-04-27 13:31:58

标签: python celery

我想用芹菜来执行一项周期性任务 根据文档:http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#entries,我写下了以下代码:

app.conf.beat_schedule = {
    'test_celery': {
        'task': 'tasks.login.test_timertask',
        'schedule': 60.0,
    }
}

但是当我按如下方式运行时:

celery beat -A tasks.login --loglevel=info

第一项任务在60年代后执行。
我希望一旦工人开始而不是延迟60秒就开始任务。我该怎么办?

1 个答案:

答案 0 :(得分:1)

您可以使用crontab schedules

from celery.schedules import crontab

app.conf.beat_schedule = {
    'test_celery': {
        'task': 'tasks.login.test_timertask',
        'schedule': crontab(), # default, executes every minute
    }
}

但您必须了解以下内容(如文档所述):

  

也存在类似Crontab的计划,请参阅Crontab schedules.

部分      

与cron一样,如果第一个任务没有,任务可能会重叠   在下一个之前完成。如果这是一个问题,你应该使用锁定   确保一次只能运行一个实例的策略(参见   例如Ensuring a task is only executed one at a time)。