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

2024-02-25

一个父进程使用 python 多处理启动两个进程 A、B,这两个进程应该并行运行。

与 Multiprocessing.Manager 共享两个列表 列表_1 列表_2

对 list_1 的写入作为参数传递给 A,在 A 内部的 list_1 变成了 list_W。 从 list_2 读取作为参数传递给 A,在 A 内部 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() 比较两个列表值,但由于每个程序一个处于读取状态,一个处于写入状态,我无法理解问题所在。


if I add

A.join()
B.join()

错误消失并且程序运行。为什么会有这种行为?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 多处理管理器 - 共享列表 - 连接被对等点 104 重置 的相关文章

随机推荐