Domanda

Sto cercando di impostare un demone lavoratore per l'elaborazione di messaggi da RabbitMQ. Sto usando Pika e la sua selezione selezionata. Il codice funziona bene se non lo eseguo come un demone. posso usare

py worker.py

e

py worker.py &

con successo. Tuttavia, quando aggiungo

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

Per worker.py, il codice, mentre non aumenta alcuna eccezione, smette di recuperare i messaggi dalla coda e massimizza il mio utilizzo della CPU. worker.py sembra esattamente come questo esempio.

Grazie.

È stato utile?

Soluzione

Innanzitutto, non ho idea di dove tu abbia ottenuto questo modulo demone, ma ho notato che tu import Daemon nel tuo esempio ma non Pika.

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

Sospetto fortemente che tu usi PIKA (anche import esegue il codice all'interno del modulo) prima di trasformare il processo in un demone. Ciò significherebbe che hai risorse in RAM che vengono copiate quando le forcelle del demone e se questo modulo demone fa la cosa giusta, eventuali prese o file aperti saranno costretti a chiudere durante il processo.

È meglio non avere oggetti la cui vita copre il confine demone. Fai funzionare i demoni completamente separati da qualsiasi altra elaborazione e chiedi loro di comunicare con altri processi tramite passaggio di messaggi come AMQP o 0MQ.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top