#python #django #celery
#python #django #запланированные задачи #сельдерей
Вопрос:
Я изучил PeriodicTask
, но примеры охватывают только повторение. Я ищу что-то большее, например cron
, возможность сказать «выполняйте эту задачу каждый понедельник в 1 час ночи».
Ответ №1:
Использование
YourTask.apply_async(args=[some, args, here], eta=when)
И в конце вашей задачи перенесите ее на следующий раз, когда она должна выполняться.
Комментарии:
1. не забывайте, что eta — это дата-время python,
2. Если я сделаю это a
PeriodicTask
, мне нужно запланировать это только в первый раз, верно?
Ответ №2:
Недавно выпущенная версия 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.")
Смотрите Список изменений для получения дополнительной информации:
Комментарии:
1. Пути импорта были изменены на
from celery.task import periodic_task
иfrom celery.schedules import crontab
Ответ №3:
Я только что отправил исправление для добавления ScheduledTask для выполнения небольшого временного планирования по сравнению с периодом:
https://github.com/celery/celery/commit/e8835f1052bb45a73f9404005c666f2d2b9a9228
Ответ №4:
Хотя ответ @asksol остается в силе, api был обновлен. Для сельдерея 4.1.0 я должен импортировать crontab
и periodic_task
следующим образом:
from celery.schedules import crontab
from celery.task import periodic_task
Ответ №5:
Как вы можете прочитать в этом руководстве, вы можете создать PeriodicTask, я думаю, если у вас есть выполнить задачу в 1.am. Утро понедельника связано с тем, что вы хотите выполнить длительную операцию cpu / mem, помните, что celery использует ampq для постановки задач в очередь.