Почему Celery не выключается корректно?

После выдачи сигнала TERM рабочему процессу Celery дважды (горячее и холодное завершение работы) с использованием прерывания клавиатуры Ctlr-C рабочий процесс Celery просто зависает. Он не потребляет сообщения и не выполняет задачи (как ожидалось), но и не выключается.

Я запустил straceдля процессов Celery, чтобы посмотреть, что происходит за сценой. Вот вывод straceдля PID основного процесса Celery

strace -p 27867
Process 27867 attached - interrupt to quit
futex(0xb966a78, FUTEX_WAIT, 0, NULL

И вот что я обнаружил, выполняя straceдля дочерних процессов:

strace -p 27874
Process 27874 attached - interrupt to quit
select(4, [3], NULL, NULL, {0, 562000}) = 0 (Timeout)
futex(0x871a808, FUTEX_WAKE, 1)         = 0
select(4, [3], NULL, NULL, {1, 0})      = 0 (Timeout)
futex(0x871a808, FUTEX_WAKE, 1)         = 0
......................................................

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

Программный стек: Python 2.6.2, Celery 2.4.6, CentOS 5.0

ОБНОВЛЕНИЕ: Загрузка ЦП снижена почти до 0%. Эти задачи довольно интенсивно используют ЦП, поэтому это подтверждает, что в настоящее время нет активных задач.

11
задан rubayeet 2 April 2012 в 11:13
поделиться