python非阻塞recv与进程之间的管道?

时间:2015-07-28 12:38:33

标签: python multiprocessing inter-process-communicat

看到这行代码但找不到文档

self.conn.setblocking(0)

问题是,如何在不阻塞的情况下轮询管道池? 有一个父进程需要与一些不稳定的子进程通信,并希望定期轮询和检查他们是否有话要说。如果他们在有新话要说之前决定他们需要更多时间,不要阻止。这会神奇地做到这一点吗?

3 个答案:

答案 0 :(得分:2)

这很可能是您所看到的:https://docs.python.org/2/library/socket.html#socket.socket.setblocking

您没有提供太多详细信息,因此我不确定您要执行的操作,但通常当您有多个要轮询的套接字时,您将使用{{3} (参见PyMOTW的这些select)。

答案 1 :(得分:2)

创建管道将返回两个连接对象。连接对象提供轮询功能,您可以在其中检查是否有任何要读取的内容。轮询功能允许您指定等待的超时。

如果您有一组正在等待的连接对象,则可以使用multiprocessing.connection.wait()或其非多处理版本。

有关详细信息,请参阅 https://docs.python.org/3/library/multiprocessing.html#multiprocessing.connection.Connection 这将显示连接对象的详细信息。查看民意调查功能

答案 2 :(得分:0)

您可以检查 p.poll(0) 如果结果为 True 则管道不为空,您可以在不阻塞的情况下接收数据。