2011-02-18 25 views
6

Me estoy ejecutando como daemon, pero a veces tengo problemas para detenerlo con gracia. Cuando envío la señal TERM y hay elementos en la cola (en este caso service celeryd stop), aprendan dejar de tomar nuevos trabajos y cierren todos los procesos de trabajo. El proceso principal, sin embargo, no se apagará.Problemas para detener el apio

Acabo de encontrarme con un escenario en el que tenía funcionando dos máquinas de trabajo separadas: A y B. Con aproximadamente 1000 mensajes en el servidor RabbitMQ, apagué A y experimenté la situación que he explicado anteriormente . B continuó trabajando, pero luego se detuvo con unos 40 mensajes en el servidor. Sin embargo, pude detener B correctamente.

He reiniciado B, para ver si sacaría los 40 elementos de la cola, pero no sería así. Luego, maté a A, luego de lo cual B agarró y completó las tareas.

Mi conclusión es que el proceso principal ha reservado los 40 elementos de nuestro servidor RabbitMQ para sus hijos. Recogerá a los niños correctamente, pero no los devolverá a RabbitMQ a menos que lo mate manualmente.

¿Alguien ha experimentado algo similar?

estoy corriendo apio 2.2.2

+0

es muy probable que algunos procesos secundarios sigan pendientes de las operaciones IO, he tenido problemas similares al intentar dejar de aplicármelo cuando hubo una operación de E/S (proceso atascado y solo matar a -9). no estoy seguro de si esto puede ayudar, pero le sugiero que compruebe si se ejecuta con gevent o Eventlet (appendix-eventlet) ya que los hilos funcionarán para usted. – Jerzyk

Respuesta