Pythonにおけるプロセス間通信 質問する

Pythonにおけるプロセス間通信 質問する

2 つの別々の Python ランタイム間で通信する良い方法は何ですか? 試したこと:

  • 名前付きパイプでの読み取り/書き込み例os.mkfifo(下手な感じ)
  • dbusサービス (デスクトップでは動作しましたが、ヘッドレスでは重すぎます)
  • ソケット (低レベルすぎるようですが、もっと高レベルのモジュールが使用できるはずです)

私の基本的な要件は、デーモンのように実行できpython listen.py、 からメッセージを受信できることですpython client.py。クライアントは、既存のプロセスにメッセージを送信して終了し、0成功した場合は戻りコード、失敗した場合はゼロ以外の値を返す必要があります (つまり、双方向通信が必要になります)。

ベストアンサー1

multiprocessing図書館提供するリスナーとクライアントソケットをラップし、任意の Python オブジェクトを渡すことができるようになります。

サーバーは Python オブジェクトを受信するためにリッスンできます:

from multiprocessing.connection import Listener

address = ('localhost', 6000)     # family is deduced to be 'AF_INET'
listener = Listener(address, authkey=b'secret password')
conn = listener.accept()
print 'connection accepted from', listener.last_accepted
while True:
    msg = conn.recv()
    # do something with msg
    if msg == 'close':
        conn.close()
        break
listener.close()

クライアントはコマンドをオブジェクトとして送信できます。

from multiprocessing.connection import Client

address = ('localhost', 6000)
conn = Client(address, authkey=b'secret password')
conn.send('close')
# can also send arbitrary objects:
# conn.send(['a', 2.5, None, int, sum])
conn.close()

おすすめ記事