【发布时间】:2015-07-28 12:38:32
【问题描述】:
看到这行代码但找不到文档
self.conn.setblocking(0)
问题是,如何在不阻塞的情况下轮询一个管道池? 有一个父进程需要与一些不稳定的子进程通信,并希望定期轮询并检查他们是否有话要说。如果他们决定需要更多时间才能有新内容要说,请不要阻止。这会神奇地做到这一点吗?
【问题讨论】:
标签: python multiprocessing inter-process-communicat
看到这行代码但找不到文档
self.conn.setblocking(0)
问题是,如何在不阻塞的情况下轮询一个管道池? 有一个父进程需要与一些不稳定的子进程通信,并希望定期轮询并检查他们是否有话要说。如果他们决定需要更多时间才能有新内容要说,请不要阻止。这会神奇地做到这一点吗?
【问题讨论】:
标签: python multiprocessing inter-process-communicat
创建管道将返回两个连接对象。连接对象提供轮询功能,您可以在其中检查是否有要读取的内容。轮询功能允许您指定等待的超时时间。
如果您有一组正在等待的连接对象,那么您可以使用 multiprocessing.connection.wait() 或它的非多处理版本。
详情见 https://docs.python.org/3/library/multiprocessing.html#multiprocessing.connection.Connection 这将向您显示连接对象的详细信息。看看投票功能
【讨论】:
这很可能是您正在查看的内容:https://docs.python.org/2/library/socket.html#socket.socket.setblocking
您没有提供太多细节,所以我不确定您要做什么,但通常当您有多个要轮询的套接字时,您将使用select(请参阅这些@987654323 @来自 PyMOTW)。
【讨论】:
您可以检查 p.poll(0) 如果结果为 True 则管道不为空,您可以在不阻塞的情况下接收数据。
【讨论】: