Celerybeat — периодические задачи с Django

Я не уверен, как вещи сочетаются друг с другом..

У меня есть приложение с активными кампаниями, которое объявляет победителей и т. д., а также отправляет напоминания о кампаниях. Кампания создана с помощью django, и в модели кампании у меня есть поле, в котором указано уведомлять победителей каждые X дней, недель или часов. Так что для этой кампании победители должны объявляться каждую пятницу. Это для каждой кампании, может быть несколько кампаний с разными победителями и настройками напоминаний.

Я не уверен, с чего начать задачу celerybeat? Должно быть при сохранении модели? А что, если что-то изменить и снова сохранить модель? Не создаст ли это еще одну задачу, что приведет к отправке 2 или более напоминаний и т. д.?


person Harry    schedule 24.05.2012    source источник
comment
Лично я обнаружил, что Celery ужасно сложен в настройке и ненадежен. Если вам не нужно выполнять задачи в распределенной архитектуре, я настоятельно рекомендую просто планировать периодические задачи через cron.   -  person Cerin    schedule 12.06.2013


Ответы (1)


Celerybeat — это демон, он должен постоянно работать в фоновом режиме (с чем-то вроде supervisord ). Учитывая тот факт, что самая короткая задержка напоминания составляет час, задача должна выполняться ежечасно.

Эта задача должна проверять все кампании и решать по данным из базы данных, какие напоминания ей отправлять. Чтобы упростить задачу, я предлагаю вам рассчитать и сохранить в следующий раз, когда напоминание должно быть отправлено при отправке. Таким образом, в следующий раз составить список напоминаний для отправки будет так же просто, как перечислить все просроченные напоминания.

person e-satis    schedule 24.05.2012