Django + Celery + RabbitMQ в кластере. В очереди имеем дубликаты от periodic_task задач

Две копии Django(1.3) приложений запущены на двух нодах.
На двух установлены Celery(2.4) с backend RabbitMQ(2.7.1).
RabbitMQ между собой реплицируются.

В приложении есть переодически выполняемые задачи. Скажем каждый час нужно скачать и пропарсить документ.

Так вот в один момент времени каждое из двух приложений добавляет в очередь по задаче (по одинаковой задаче). И таким образом мы дважды скачиваем документ и дважды его парсим.

Как этого избежать ???
  • Вопрос задан
  • 3847 просмотров
Пригласить эксперта
Ответы на вопрос 2
@niko83 Автор вопроса
Кажется решения из коробки нет.
Какую-то самоедльную примочку мастерить придётся так как:

celery.readthedocs.org/en/latest/userguide/periodic-tasks.html
«You can also start celerybeat with celeryd by using the -B option, this is convenient if you only intend to use one worker node»

python manage.py celeryd --help
«Also run the celerybeat periodic task scheduler. NOTE:
Only one instance of celerybeat must berunning at any
one time.»
Ответ написан
Комментировать
@salvator
Ну так в чем вопрос то? Держите celerybeat на одной ноде, пусть он раздает задачи.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы