2016-03-08 2 views
0

У меня есть задание по электронной почте в сельдерее, у которого есть эта 10 дней с момента(). Тем не менее, я обнаружил, что некоторые люди получают 5-6 дубликатов писем за раз. Я столкнулся с этой проблемой, прежде чем BROKER_TRANSPORT_OPTIONS установил слишком низкий уровень. Теперь у меня есть это в моем файле настроек:Запускает ли сельдерей повторяющиеся задачи?

BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 2592000} #30 days 

Так что это не должно быть проблемой. Мне просто интересно, есть ли что-нибудь еще, что может вызвать это. то есть перезапуск сельдерея. Сельдерей перезапускается каждый раз, когда я разворачиваю новый код, и это может произойти 5 или более раз в неделю, так что это единственное, что я могу придумать.

Любые идеи?

Спасибо.

+0

Какой брокер вы используете и можете ли вы видеть задачи в очереди? – AndrewS

+0

@AndrewS Я использую redis. Да, я вижу задачи в очереди. Список очень длинный, поэтому трудно понять, есть ли какие-либо проблемы, просто глядя. –

ответ

0

Репликация задачи возможна, если рабочие/битовые процессы не прекратились правильно. Как вы перезапускаете работников сельдерея/избиваете? Проверьте сервер для работника сельдерей-зомби и избивайте процессы. Попытайтесь остановить все процессы сельдерея, проверьте, нет ли каких-либо процессов сельдерея, и начните его снова. В конце концов проверьте, что ps ax | grep celery показывает свежих работников и только один удар.

+0

Я управляю сельдереем под надзором. Команда, которую я использую, - суперсервер, перезапускающий сельдерей. Спасибо, я посмотрю на это позже. –

+0

Так что я только что проверил. Работает только один процесс. Кроме того, скрипт запуска супервизора: '/ envs/flavourly/bin/python/envs/flavourly/bin/celery --app = flavourly.celery: app worker -P gevent --concurrency = 10 --llusvel = INFO' –

0

Задачи не перезапускаются в случае неправильной остановки работника, если вы установили CELERY_ACKS_LATE = False. В этом случае задача, отмеченная как подтвержденная сразу после потребления. См. docs.

Также убедитесь, что в ваших задачах нет retry. Если какое-либо исключение происходит внутри задачи - они могут повторить попытку с теми же входными аргументами.

Другой возможный случай - ваши задачи написаны неправильно, и каждый запуск выбирает одни и те же получатели.

Смежные вопросы