gpt4 book ai didi

Python子进程超时?

转载 作者:IT老高 更新时间:2023-10-28 20:58:35 24 4
gpt4 key购买 nike

是否有任何参数或选项可以为 Python 的 subprocess.Popen 方法设置超时?

类似这样的:

subprocess.Popen(['..'], ..., timeout=20) ?

最佳答案

我建议看看 Timer classthreading模块。我用它来实现 Popen 的超时。 .

首先,创建一个回调:

def timeout( p ):
if p.poll() is None:
print 'Error: process taking too long to complete--terminating'
p.kill()

然后打开进程:

proc = Popen( ... )

然后创建一个将调用回调的计时器,将进程传递给它。

t = threading.Timer( 10.0, timeout, [proc] )
t.start()
t.join()

在程序后面的某个地方,您可能想要添加以下行:

t.cancel()

否则,python 程序将一直运行,直到计时器完成运行。

编辑:我被告知有一个竞争条件,subprocess p可能在 p.poll() 之间终止和 p.kill()来电。我相信下面的代码可以解决这个问题:

import errno

def timeout( p ):
if p.poll() is None:
try:
p.kill()
print 'Error: process taking too long to complete--terminating'
except OSError as e:
if e.errno != errno.ESRCH:
raise

虽然您可能希望清理异常处理以专门处理子进程已正常终止时发生的特定异常。

关于Python子进程超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3733270/

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