Django с сельдереем: запланированная задача (ETA) выполняется несколько раз параллельно

Я разрабатываю веб-приложение с Django, которое использует Celery для обработки асинхронных задач, особенно для транзакционных электронных писем.

Одна из моих задач по электронной почте запланирована с опцией ETA, но она выполняется несколько раз параллельно, что приводит к цепочке писем, что очень раздражает. Я не могу понять, почему именно. Я дважды проверил свой код Django и уверен, что он публикуется только один раз.

Я использую Redis в качестве результата брокера/бэкенда.

Мой демон Celery размещен на Heroku и запускается с помощью этой команды:

python manage.py celeryd -E -B --loglevel=INFO

Спасибо за вашу помощь.

РЕДАКТИРОВАТЬ: я нашел правильное решение здесь благодаря парню на IRC-канале #celery: http://loose-bits.com/2010/10/distributed-task-locking-in-celery.html


person arnaud.breton    schedule 25.02.2013    source источник
comment
Обязательно прочитайте: docs.celeryproject.org/en /latest/getting-started/brokers/   -  person asksol    schedule 26.02.2013
comment
Проблема в том, что я не знаю максимальное время прибытия в своем приложении. Я всегда публикую их, как только могу, даже в далеком будущем (случается не часто). Для этого я должен изменить дизайн своего приложения, сохранить его в БД и иметь краулер для публикации их за 1 час до этого для пример..   -  person arnaud.breton    schedule 26.02.2013


Ответы (1)


Вы проверили Обеспечение выполнения задачи только по одной docs?

person friism    schedule 25.02.2013
comment
Спасибо за Ваш ответ. Я проверяю похожее решение здесь: loose-bits .com/2010/10/distributed-task-locking-in-celery.html с использованием Redis. Кажется, это работает довольно хорошо, я немного настраиваю его, потому что мне нужно блокировать другие задачи того же типа И с тем же контекстом. Я хэширую аргументы задачи, объединенные с именем функции задачи, в качестве ключа блокировки. Мне также пришлось добавить декоратор оберток из functools, так как я использую задачи на основе функций. - person arnaud.breton; 26.02.2013