【问题标题】:python multiprocessing manager - shared list - connection reset by peer 104python多处理管理器-共享列表-对等点104重置连接
【发布时间】:2013-06-14 20:47:17
【问题描述】:

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

与 Multiprocessing.Manager 共享两个列表 列表_1 list_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 从作为参数传递给 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() 比较两个列表值,但由于每个程序一个是读取的,一个是写入的,我不明白问题出在哪里。

【问题讨论】:

    标签: python list connection multiprocessing reset


    【解决方案1】:

    如果我添加

    A.join()
    B.join()
    

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

    【讨论】:

      猜你喜欢
      • 2014-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-03
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多