Я запускаю celeryd как демон, но иногда мне трудно остановить его изящно.Когда я отправляю сигнал TERM, и в очереди появляются элементы (в данном случае service celeryd stop
), celeryd прекращает выполнение новых заданий и закрывает все рабочие процессы.Однако родительский процесс не будет остановлен.
Я только что столкнулся со сценарием, в котором у меня был celeryd, работающий на двух отдельных рабочих машинах: A и B. Примерно с 1000 сообщений на сервере RabbitMQ,Я закрыл A и испытал ситуацию, которую я объяснил выше.B продолжал работать, но затем остановился, оставив около 40 сообщений на сервере.Я, однако, был в состоянии остановить B правильно.
Я перезапустил B, чтобы посмотреть, удалит ли он 40 элементов из очереди, но это не так.Затем я жестко убил А, после чего В схватил и выполнил задания.
Мои выводы заключаются в том, что родительский процесс зарезервировал 40 элементов с нашего сервера RabbitMQ для своих детей.Он будет правильно собирать детей, но не вернет их обратно в RabbitMQ, если я не убью их вручную.
Кто-нибудь испытывал нечто подобное?
Я использую Celery 2.2.2