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

python non blocking recv with pipe between processes?

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

self.conn.setblocking(0)

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

这很可能是您正在查看的内容:https://docs.python.org/2/library/socket.html#socket.socket.setblocking

您没有提供太多细节,所以我不确定您要做什么,但通常当您有许多要轮询的套接字时,您将使用 select (see these examples 来自PyMOTW).

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

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

详情请见 https://docs.python.org/3/library/multiprocessing.html#multiprocessing.connection.Connection 这将向您显示连接对象的详细信息。查看poll函数

您可以检查 p.poll(0) 然后如果结果为真则管道不为空并且您可以无阻塞地接收数据。