1. ホーム
  2. python

[解決済み] Pythonによるプロセス間通信

2022-11-21 19:57:44

質問

2つの別々のPythonランタイム間で通信するための良い方法は何ですか?私が試したものです。

  • 名前付きパイプでの読み書きの例 os.mkfifo (ハチャメチャな感じ)
  • dbus サービス (デスクトップでは動作していたが、ヘッドレスでは重すぎる)
  • ソケット (低レベルすぎるように思われます。きっと使用するための高レベルのモジュールがあるのでしょう?)

私の基本的な要件は python listen.py からメッセージを受け取ることができることです。 python client.py . クライアントは、既存のプロセスにメッセージを送り、終了させなければなりません。 0 を、成功した場合は 0 以外を返します (つまり、双方向通信が必要です)。

どのように解決するのですか?

この multiprocessing ライブラリ 提供 リスナーやクライアント を提供し、ソケットをラップして、任意の python オブジェクトを渡すことができます。

あなたのサーバはpythonオブジェクトを受け取るためにリスニングすることができます。

from multiprocessing.connection import Listener

address = ('localhost', 6000)     # family is deduced to be 'AF_INET'
listener = Listener(address, authkey='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='secret password')
conn.send('close')
# can also send arbitrary objects:
# conn.send(['a', 2.5, None, int, sum])
conn.close()