在我的主 python 程序中,我使用以下代码生成了一个子程序:
child = subprocess.Popen(..., stdout=subprocess.PIPE, stdin=subprocess.PIPE)
FWIW,孩子是一个PHP脚本,需要与python程序来回通信。
主 python 程序实际上需要侦听来自其他几个通道的通信 - 使用相同代码生成的其他 PHP 脚本,或来自 的套接字对象socket.accept()
,我想使用select.select()
它,因为这是等待来自各种输入的最有效方式的来源。
我遇到的问题是,select.select()
在 Windows 下不能使用子进程的标准输出文件描述符(这是记录在案的),看起来我将被迫:
- A) 轮询 PHP 脚本以查看它们是否已将任何内容写入标准输出。(这个系统需要非常灵敏,我需要每秒至少轮询 1,000 次!)
- B) 让 PHP 脚本连接到主进程并通过套接字而不是 stdout/stdin 进行通信。
我可能会选择解决方案(B),因为我不能让自己以如此高的频率进行系统轮询,但是当 stdout/stdin 做得很好时,重新连接套接字似乎是一种可悲的资源浪费。
是否有一些替代解决方案可以让我使用 stdout和 select.select()
?