使用多处理。管道我创建了两个多处理。连接对象,对于其中一个,我通过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
方法都与底层句柄(recv
、send
(交互。
因为multiprocessing.Pipe
在windows中创建了一个命名的管道,再加上管道句柄继承在python2中的工作方式(这曾经被确定为显示出大量讨论的根本原因(,传递句柄似乎非常困难,如果不是不可能的话。
再次查看多处理的文档,我注意到Listener
和Client
接口对我来说运行良好,将Listener.address
属性中的任何内容传递给Client
的构造函数。