【问题标题】:how can celery execute a periodic task immediately?celery 如何立即执行周期性任务?
【发布时间】:2017-09-25 08:16:08
【问题描述】:

我想用 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 秒。我该怎么办?

【问题讨论】:

标签: python celery


【解决方案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)。

【讨论】:

  • 感谢您的回答,很有用!
  • 很高兴知道@resolvewang 愿意接受答案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
  • 2018-11-28
  • 1970-01-01
  • 2015-10-28
  • 1970-01-01
  • 2020-09-30
  • 2018-08-03
相关资源
最近更新 更多