python多处理管理器 - 共享列表 - 由对等104重置的连接

时间:2013-06-18 14:58:57

标签: python list connection multiprocessing reset

一个父级启动两个进程A,B,其中python多处理应并行运行。

使用Multiprocessing.Manager共享两个列表 LIST_1 list_2

对list_1的写入作为参数传递给A,在list_1中变为list_W。 从作为参数传递给A的list_2读取,在list_2中变为list_R B写入作为参数传递给B的list_2,B list_2内部变为list_W。 B从作为参数传递给B的list_1读取,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()比较两个列表值,但是对于每个程序,一个是读取值和一个写入值,我无法理解它是什么问题。

1 个答案:

答案 0 :(得分:0)

如果我添加

A.join()
B.join()

错误消失,程序运行。为什么会出现这种情况?