Я изучил PeriodicTask
, но примеры касаются только повторения. Я ищу нечто похожее на способность cron
сказать "выполнять это задание каждый понедельник в час ночи".
Как я могу запланировать выполнение задачи в определенное время с помощью сельдерея?
Ответы (5)
Недавно выпущенная версия 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
from celery.task import periodic_task
и from celery.schedules import crontab
.
- person hughes; 01.03.2013
Использовать
YourTask.apply_async(args=[some, args, here], eta=when)
И в конце вашей задачи перенесите ее на следующий раз, когда она должна выполняться.
PeriodicTask
, мне нужно запланировать его только в первый раз, верно?
- person Hank Gay; 02.01.2010
Я только что отправил патч, чтобы добавить ScheduledTask для выполнения небольшого планирования на основе времени по сравнению с периодом:
https://github.com/celery/celery/commit/e8835f1052bb45a73f9404005c666f92d28b9a>
Как вы можете прочитать в этом руководстве, вы можете создать PeriodicTask, я думаю если вы выполнили задачу в час ночи. Утро понедельника, потому что вы хотите запустить длинную операцию cpu/mem, помните, что сельдерей использует ampq для задач постановки в очередь.
Хотя ответ @asksol остается в силе, API был обновлен. Для celery 4.1.0 мне нужно импортировать crontab
и periodic_task
следующим образом:
from celery.schedules import crontab
from celery.task import periodic_task