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()