Python のプロセス間通信: パイプとソケットを超えて
マルチプロセッシングはシステム設計の重要な側面ですが、プロセス間通信 (IPC) には課題がありますこれにより、別々の Python ランタイム間の効率的な通信が妨げられる可能性があります。名前付きパイプや dbus サービスなどの従来の方法は、満足のいくものではないか、過度に複雑に見えるかもしれません。
よりエレガントなソリューションの発見
マルチプロセッシングは、IPC に対する洗練されたアプローチを提供します。ソケットをカプセル化し、Python オブジェクトのシームレスな交換を可能にするリスナーとクライアント。これらの機能を活用することで、特定の要件を満たす堅牢で効果的な通信チャネルを設計できます。
関数コードの例
サーバー プロセスの次のコード スニペットを考えてみましょう。受信メッセージをリッスンする:
<code class="python">from multiprocessing.connection import Listener address = ('localhost', 6000) 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()</code>
このコードは、特定のアドレスでリスナーを確立し、受信接続を待ちます。接続を受信すると、それを受け入れ、メッセージの待機を開始します。受信したメッセージは必要に応じて処理でき、「close」などの制御メッセージによって通信の終了をトリガーできます。
クライアント接続の開始
クライアント側、次のコード スニペットは、オブジェクトをメッセージとして送信する方法を示しています。
<code class="python">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()</code>
このクライアントはリスナーに接続し、メッセージ オブジェクトを送信し、必要に応じて追加のオブジェクトをオプションで送信します。次に、接続を閉じて、プロセス間の通信のシンプルかつ強力な手段を提供します。
結論
マルチプロセス リスナーとクライアントを利用することで、従来のリスナーとクライアントの欠点を克服できます。 IPC メソッドを使用して、Python ランタイム間の効率的で信頼性の高い通信チャネルを確立します。メッセージを受信するデーモンを作成する必要がある場合でも、オブジェクトとしてコマンドを送信するデーモンを作成する必要がある場合でも、マルチプロセッシングは柔軟で堅牢なソリューションを提供します。
以上がマルチプロセスのリスナーとクライアントは Python のプロセス間通信をどのように強化できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。