Как я могу запланировать выполнение задачи в определенное время с помощью сельдерея?

Я просмотрел PeriodicTask, но примеры только охватывают его повторение. Я ищу что-то более похожее на способность cron сказать "выполнять эту задачу каждый понедельник в 1 час ночи".

Ответы

Ответ 1

Недавно выпущенная версия 1.0.3 теперь поддерживает это благодаря Патрику Альтману!

Пример:

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

Ответ 2

Использование

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

И в конце вашей задачи перенесите его в следующий раз, когда он будет запущен.

Ответ 4

Как вы можете прочитать в этом tutorial, вы можете сделать PeriodicTask, я думаю, если вы выполнили задачу в 1. есть. Утро понедельника - это то, что вы хотите запустить длинную операцию cpu/mem, вспомните, как использовать сельдерей ampq для выполнения задач очереди.

Ответ 5

В то время как ответ @asksol по-прежнему сохраняется, api был обновлен. Для сельдерея 4.1.0 мне нужно импортировать crontab и periodic_task следующим образом:

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