2

これは Python 3.2.2 用です。私はPythonとマルチプロセッシングがどのように機能するかを学んでいるだけで、この単純な例は私をつまずかせています:

from multiprocessing import Pipe, Process

def f(r):
    print(r.recv())

if __name__ == '__main__':
    q, r = Pipe()
    p = Process(target=f, args=(r,))
    p.start()
    q.send([42, None, 'hello'])
    p.join()

メイン スレッドは、新しい を作成しProcess、双方向接続オブジェクトを function にp送信します。プロセスが開始されると、メインプロセスが.rf()pr.recv()q.send

次に、コースが実行さp.join()れるまでメインプロセスを待機させる必要があります。p

しかし、何も起こりません。printにステートメントを追加しても、何も実行されず、機能しないf()かのように、そこでも何も起こりません。f()p.start()

これが機能しない理由と、修正できる可能性があることを説明できますか?

4

2 に答える 2

3

しばらく時間が経っていることは知っていますが、この問題を抱えている他の人にとっては、パイプの端が逆になっています. 受信側を使用して送信しようとしており、送信側で受信しようとしています。duplex=True を Pipe コンストラクターに追加すると、さまざまな端の処理がはるかに簡単になることがわかりました。

ソース: https://docs.python.org/2/library/multiprocessing.html#pipes-and-queues

于 2014-07-23T15:05:46.247 に答える