Pregunta

Estoy tratando de configurar un demonio trabajador para procesar mensajes de RabbitMQ. Estoy usando PIKA y su selección. El código funciona bien si no lo ejecuto como demonio. Puedo usar

py worker.py

y

py worker.py &

exitosamente. Sin embargo, cuando agrego

import daemon
with daemon.DaemonContext():
    connection.ioloop.start()

Para Worker.py, el código, aunque no aumenta ninguna excepción, deja de obtener mensajes de la cola y maximiza la utilización de mi CPU. Worker.py se ve exactamente como este ejemplo.

Gracias.

¿Fue útil?

Solución

Primero, no tengo idea de dónde obtienes este módulo de demonio, pero me di cuenta de que tú import demonio en tu ejemplo pero no pika.

import daemon
with daemon.DaemonContext():
    import pika
    # any additional pika code here, maybe the creation of connection?
    connection.ioloop.start()

Sospecho firmemente que usa PIKA (incluso importe el código de ejecución dentro del módulo) antes de convertir el proceso en un demonio. Esto significaría que tiene recursos en RAM que se copian cuando el Daemon se hornea, y si este módulo de Daemon hace lo correcto, entonces cualquier enchufes o archivos abiertos se verá obligado a cerrar durante el proceso.

Es mejor no tener ningún objeto cuya vida abarque el límite de demonio. Haga que los demonios funcionen completamente separados de cualquier otro procesamiento y haga que se comuniquen con otros procesos a través de mensajes que pasan como AMQP o 0MQ.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top