2

1 つの親が 2 つのプロセス A、B を並行して実行する必要がある Python マルチプロセッシングで起動します。

Multiprocessing.Manager list_1 list_2 で 2 つのリストを共有する

パラメータとして A に渡される list_1 への書き込みは、A list_1 内で list_W になりました。A にパラメーターとして渡される list_2 からの読み取り、A list_2 内で list_R B パラメーターとして B に渡される list_2 への書き込み、B list_2 内で list_W になりました。B にパラメーターとして渡される list_1 から読み取られた B は、B list_1 内で list_R になりました

A または B を multiprocessing.process としてではなく、単一の関数として呼び出すと、問題なく実行されます。

それらを multiprocessing.process として呼び出すと、次のようになります。

Traceback (most recent call last):
  File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "myprg/A.py", line 47, in A
    watch()                                                         
  File "myprg/DEFINITIONS.py", line 87, in watch
    if list_W[0] != list_R[0]:
  File "<string>", line 2, in __getitem__
  File "/usr/lib/python2.7/multiprocessing/managers.py", line 759, in _callmethod
    kind, result = conn.recv()
IOError: [Errno 104] Connection reset by peer

watch() は 2 つのリストの値を比較しますが、プログラムごとに 1 つが読み取り、もう 1 つが書き込みであるため、何が問題なのかわかりません。

4

1 に答える 1

1

追加すると

A.join()
B.join()

エラーが消え、プログラムが実行されます。なぜこの動作ですか?

于 2013-06-19T09:42:04.183 に答える