Как я могу запланировать выполнение задачи в определенное время с помощью сельдерея?
Я просмотрел 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)
И в конце вашей задачи перенесите его в следующий раз, когда он будет запущен.
Ответ 3
Я только что представил патч, чтобы добавить ScheduledTask для выполнения небольшого времени планирования по времени и времени:
https://github.com/celery/celery/commit/e8835f1052bb45a73f9404005c666f2d2b9a9228
Ответ 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