使用multiprocessing.Pipe创建两个multiprocessing.Connection对象,为此我通过Conection.fileno()
读取文件描述符/句柄,然后将其作为命令行参数传递给另一个进程。我相信这类似于多处理产生子进程的方式。
在子进程中,我通过从命令行参数读取句柄来创建multiprocessing.Connection对象,然后在两个进程之间进行通信。
这在我的Mac上运行良好,但是由于某些原因在Windows上调用Connection.poll
方法会导致以下错误:
IOError:[Errno 10038]尝试对非套接字的东西进行操作
造成差异的原因是什么?为什么在poll
的文档中没有提及?
一个简单的代码示例可能类似于:
在father.py中:
c1, c2 = multiprocessing.Pipe()
subprocess.Popen(['child.py', str(c1.fileno())])
在child.py中:
c1 = multiprocessing.Connection(int(sys.argv[1]))
c1.poll(1)
有关其他详细信息,我的this问答描述了我要实现的目标以及最终的实现方式。