Pikaのconnection.ioloop.start()をデーモンで実行できますか?
-
28-10-2019 - |
質問
rabbitmqからメッセージを処理するためにワーカーデーモンをセットアップしようとしています。 PikaとそのSelectConnectionを使用しています。デーモンとして実行しない場合、コードは正常に機能します。使うことができます
py worker.py
と
py worker.py &
正常に。ただし、追加すると
import daemon
with daemon.DaemonContext():
connection.ioloop.start()
Worker.pyに、コードは例外を提起しませんが、キューからメッセージの取得を停止し、CPU使用率を最大化します。 worker.pyはまったく似ています これ 例。
ありがとう。
解決
まず、このデーモンモジュールをどこで手に入れたのかわかりませんが、あなたに気づきました import
あなたの例ではデーモンですが、ピカではありません。
import daemon
with daemon.DaemonContext():
import pika
# any additional pika code here, maybe the creation of connection?
connection.ioloop.start()
プロセスをデーモンに変える前に、Pika(モジュール内でコードを実行する)を使用することも強く疑われます。これは、デーモンフォーク時にコピーされるRAMにリソースがあることを意味し、このデーモンモジュールが正しいことを行う場合、オープンソケットまたはファイルはプロセス中に閉鎖を余儀なくされます。
寿命がデーモンの境界にまたがるオブジェクトを持っていない方が良いです。 Daemonsを他の処理と完全に分離し、AMQPや0MQなどのメッセージの渡しを介して他のプロセスと通信してもらいます。
所属していません StackOverflow