gpt4 book ai didi

python - 从损坏的管道读取时,管道 Python 脚本占用 100% 的 CPU

转载 作者:太空宇宙 更新时间:2023-11-03 13:49:33 24 4
gpt4 key购买 nike

我有两个 Python 脚本在 Ubuntu Linux 机器上运行。第一个将其所有输出发送到标准输出,第二个从标准输入读取。它们通过一个简单的管道连接,即像这样:

./step1.py <some_args> | ./step2.py <some_other_args>

step2 所做的是在无限循环中读取输入行并处理它们:

while True:
try:
l = sys.stdin.readline()
# processing here

Step1 有时会崩溃。当这种情况发生时(不确定是否总是但至少有几次)不是崩溃/停止,而是 step2 变得疯狂并开始占用 100% 的 CPU,直到我手动杀死它。

为什么会发生这种情况,我怎样才能使 step2 更健壮,以便它在管道破裂时停止?

谢谢!

最佳答案

其他人已经解释了为什么在某些情况下你会陷入无限循环。

在第二个(阅读)脚本中,您可以使用成语:

for line in sys.stdin:
process(line)

这样你就不会陷入死循环。此外,您实际上并没有显示您试图在第二个脚本中捕获哪个异常,但我想您会不时遇到“破管”错误,您可以并且应该捕获如此处所述:How to handle a broken pipe (SIGPIPE) in python?

整个方案看起来像这样:

try:
for line in sys.stdin:
process(line)
except IOError, e:
if e.errno == errno.EPIPE:
# EPIPE error
else:
# Other error

关于python - 从损坏的管道读取时,管道 Python 脚本占用 100% 的 CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12356241/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com