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

#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.")
  

Смотрите Список изменений для получения дополнительной информации:

http://celeryproject.org/docs/changelog.html

Комментарии:

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 для постановки задач в очередь.