Проблемы с остановкой celeryd

Я запускаю celeryd как демон, но иногда возникают проблемы с его корректной остановкой. Когда я отправляю сигнал TERM и в очереди есть элементы (в данном случае service celeryd stop ) celeryd перестанет выполнять новые задания и завершит все рабочие процессы. Однако родительский процесс не закрывается.

Я только что столкнулся со сценарием, в котором у меня был celeryd, работающий на двух отдельных рабочих машинах: A и B. При наличии около 1000 сообщений на сервере RabbitMQ я отключился. А, и испытал ситуацию, которую я объяснил выше. B продолжал работать, но затем остановился, на сервере осталось около 40 сообщений. Однако я смог правильно остановить Б.

Я перезапустил B, чтобы посмотреть, удалит ли он 40 элементов из очереди, но этого не произошло. Затем я жестко убил A, после чего B захватил и выполнил задачи.

Мои выводы таковы, что родительский процесс зарезервировал 40 элементов с нашего сервера RabbitMQ для своих дочерних элементов. Он правильно пожнет детей, но не вернет элементы обратно в RabbitMQ, если я не убью его вручную.

Кто-нибудь испытывал нечто подобное?

Я использую Celery 2.2.2

6
задан Zach 23 March 2011 в 16:49
поделиться