Question

J'essaie de configurer un démon de travail pour traiter les messages de RabbitMq.J'utilise pika et son SelectConnection.Le code fonctionne bien si je ne l'exécute pas en tant que démon.je peux utiliser

py worker.py

et

py worker.py &

avec succès.Cependant, quand j'ajoute

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

à work.py, le code, bien qu'il ne génère aucune exception, arrête de récupérer les messages de la file d'attente et maximise l'utilisation de mon processeur.travailleur.py ressemble exactement à ce exemple.

merci.

Était-ce utile?

La solution

Premièrement, je n'ai aucune idée d'où vous avez obtenu ce module démon, mais j'ai remarqué que vous import démon dans votre exemple mais pas pika.

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

Je soupçonne fortement que vous utilisez pika (même import exécute le code à l'intérieur du module) avant de transformer le processus en démon.Cela signifierait que vous disposez de ressources dans la RAM qui sont copiées lors du fork du démon, et si ce module démon fait la bonne chose, alors tous les sockets ou fichiers ouverts seront forcés de se fermer pendant le processus.

Il est préférable de ne pas avoir d'objets dont la durée de vie dépasse les limites du démon.Faites en sorte que les démons s'exécutent entièrement séparément de tout autre traitement et faites-les communiquer avec d'autres processus via la transmission de messages tels que AMQP ou 0MQ.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top