为什么我不能对多处理进行poll().Windows上的连接对象



使用多处理。管道我创建了两个多处理。连接对象,对于其中一个,我通过Conection.fileno()读取文件描述符/句柄,然后将其作为命令行参数传递给另一个进程。我相信这类似于多处理如何产生子进程。

在一个子进程中,我正在创建一个多进程。连接对象,然后在两个进程之间进行通信。

这在我的mac上运行良好,但由于某些原因,在windows上调用Connection.poll方法会导致以下错误:

IOError:[Erno 10038]试图在非套接字上执行操作

造成差异的原因是什么?为什么poll的文档中没有提到这一点?

一个简单的代码示例可能类似于:

在父亲.py:

c1, c2 = multiprocessing.Pipe()
subprocess.Popen(['child.py', str(c1.fileno())])

在child.py:中

c1 = multiprocessing.Connection(int(sys.argv[1]))
c1.poll(1)

关于更多的细节,我的这个问答描述了我试图实现的目标以及我是如何做到的。

事实证明,该问题并非特定于poll,而是所有Connection方法都与底层句柄(recvsend(交互。

因为multiprocessing.Pipe在windows中创建了一个命名的管道,再加上管道句柄继承在python2中的工作方式(这曾经被确定为显示出大量讨论的根本原因(,传递句柄似乎非常困难,如果不是不可能的话。

再次查看多处理的文档,我注意到ListenerClient接口对我来说运行良好,将Listener.address属性中的任何内容传递给Client的构造函数。

相关内容

  • 没有找到相关文章

最新更新