Python 2.6 通过队列/管道/等发送连接对象

2023-11-22

Given 这个错误(Python 问题 4892)这会导致以下错误:

>>> import multiprocessing
>>> multiprocessing.allow_connection_pickling()
>>> q = multiprocessing.Queue()
>>> p = multiprocessing.Pipe()
>>> q.put(p)
>>> q.get()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File     "/.../python2.6/multiprocessing/queues.py", line 91, in get
    res = self._recv()
TypeError: Required argument 'handle' (pos 1) not found

有谁知道在队列上传递 Connection 对象的解决方法?

谢谢。


(我相信的是)在发现这篇文章之前,经过一番尝试(我遇到了同样的问题。想要将管道穿过管道。),这是一个更好的方法:

>>> from multiprocessing import Pipe, reduction
>>> i, o = Pipe()
>>> reduced = reduction.reduce_connection(i)
>>> newi = reduced[0](*reduced[1])
>>> newi.send("hi")
>>> o.recv()
'hi'

我不完全确定为什么这是这样构建的(有人需要深入了解多处理的减少部分到底是什么),但它确实有效,并且不需要 pickle 导入。除此之外,它的功能与上面的非常接近,但更简单。我还将其放入 python 错误报告中,以便其他人知道解决方法。

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

Python 2.6 通过队列/管道/等发送连接对象 的相关文章