从PIPE读取stdin的Python没有阻塞

时间:2016-10-10 14:32:32

标签: python subprocess

为简单起见,这里减少了代码。

server.py

import sys

while True:
    for line in sys.stdin:
        # Do something here

client.py

import subprocess
import sys

p = subprocess.Popen([sys.executable, "server.py"], stdin=subprocess.PIPE)

当我在sys.stdin中没有数据时,在for循环中stdin读取时直接运行 server.py 的python块。这是预期的。

当我运行 client.py ,在stDI连接到PIPE的子进程中运行 server.py 时,server.py不再在for循环中阻塞在stdin中读取,导致我的CPU使用率达到100%。这是因为当没有任何内容可以从stdin中读取时,循环无限运行而不是阻塞。

在导致此问题的子进程中将stdin连接到PIPE有什么用?有办法解决吗?当没有数据要读取stdin时,我想要for循环阻塞。

0 个答案:

没有答案