Я изучил PeriodicTask
, но примеры только покрывают то, чтобы заставлять это повториться. Я ищу что-то больше как cron
способность сказать "выполняет эту задачу каждый понедельник в 1:00".
Недавно выпущенная версия 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.")
Смотрите изменение для получения дополнительной информации:
Используйте
YourTask.apply_async(args=[some, args, here], eta=when)
И в конце задачи перенесите ее на следующий запуск
.Как вы можете прочитать в этом учебном пособии , вы можете сделать PeriodicTask, я думаю, если вы выполнили задачу в 1 .am. Утро понедельника - это потому, что вы хотите запустить длинную операцию на процессоре/меме, а сельдерей на память использует ampq для выполнения задач enqueue.
.Я только что отправил патч, чтобы добавить ScheduledTask, чтобы выполнить небольшое планирование на основе времени по сравнению с периодом:
https://github.com/celery/celery/commit/e8835f1052bb45a73f9404005c666f2d2b9a9228