如何使用芹菜安排在特定时间执行任务?

时间:2010-01-02 03:37:17

标签: python django scheduled-tasks celery

我调查了PeriodicTask,但这些例子只涵盖了重复发生。我正在寻找更像cron能够说“每周一凌晨1点执行此任务”的内容。

5 个答案:

答案 0 :(得分:28)

最近发布的版本1.0.3现在支持这一点,感谢Patrick Altman!

示例:

from celery.task.schedules import crontab
from celery.decorators import periodic_task

@periodic_task(run_every=crontab(hour=7, minute=30, day_of_week="mon"))
def every_monday_morning():
    print("This runs every Monday morning at 7:30a.m.")

有关详细信息,请参阅更改日志:

http://celeryproject.org/docs/changelog.html

答案 1 :(得分:27)

使用

YourTask.apply_async(args=[some, args, here], eta=when)

在任务结束时,将其重新安排到下次运行时。

答案 2 :(得分:5)

我刚刚提交了一个补丁来添加一个ScheduledTask,以完成一小部分基于时间的调度,而不是基于时间段:

https://github.com/celery/celery/commit/e8835f1052bb45a73f9404005c666f2d2b9a9228

答案 3 :(得分:0)

如何阅读这个tutorial,你可以制作一个PeriodicTask,我想如果你已经在1 .am执行了一项任务。星期一早上是因为你想要运行一个长期的cpu / mem操作,记住芹菜使用ampq进行入队任务。

答案 4 :(得分:0)

虽然@asksol的答案仍然有效,但api已经更新。对于芹菜4.1.0,我必须导入crontabperiodic_task,如下所示:

from celery.schedules import crontab
from celery.task import periodic_task