Проблемы с остановкой сельдерея - PullRequest
6 голосов
/ 18 февраля 2011

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

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

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

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

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

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

1 Ответ

3 голосов
/ 23 марта 2011

Я считаю, что это связано с:

https://github.com/celery/celery/issues/264

Настройка

CELERY_DISABLE_RATE_LIMITS = False

в вашем файле settings.py должен работать.

...