当使用具有大量输出到标准输出的子进程时,Python 代码挂起



>我有一个子进程,可以将大量数据输出到标准输出。当生成太多数据时,它会导致子进程挂起,因为它正在等待 stdout 缓冲区被清空。

下面是一个小例子...

test.py

#!/usr/local/bin/python2.7
# test.py
import subprocess
proc = subprocess.Popen(["python","./_ping_con.py"], stdout = subp.PIPE)
while proc.poll() is None:
    pass
print proc.stdout.read()

。和子流程:

#!/usr/local/bin/python2.7
# _ping_con.py
print(96000 * "*")   # Hangs here because it's too much data for the stdout pipe

我想知道的是,是否可以扩展此缓冲区以允许处理更多数据?如果没有,是否有其他方式可以发送数据来避免此问题?或者在主进程中,有没有办法判断标准输出缓冲区是否已满并进行读取?

我最终所做的是将所有输出写入一个临时文件,然后将文件名传递回父文件。效果很好!

最新更新