我有一个用Python编写的服务器,它基本上接受来自客户端的传入连接,并将从客户端接收到的数据提供给子进程(每个连接一个实例),然后处理数据并将结果返回到服务器,以便它可以发送它返回给客户端。
问题是数据正在流入,我需要能够在看不到 EOF 的情况下执行多个读/写操作。到目前为止,我一直无法想出一个解决方案,使我能够做到这一点而不会让我的服务器程序在读取时被阻止。有什么建议么?谢谢。
最佳答案
您可以使用select.select (在 Unix 和 Windows 上可用)。
while True:
rlist, wlist, xlist = select.select([client, proc.stdout], [], [])
对 select.select
的调用将阻塞,直到 client
套接字或 proc.stdout
准备好读取。
rlist
包含可供读取的 [client.stdin, proc.stdout]
子集。
可以找到其用法示例(尽管针对不同的问题)here .
关于Python子进程: streaming in and out,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9517223/