在Python 3中实现超时的最简单方法

时间:2014-06-17 13:15:18

标签: python python-3.x timer

如何为循环中的每次迭代设置计时器?

for i in range(0,n):
    subprocess.call()

如果调用时间超过指定时间,则应取消调用,循环应继续下一次迭代。因此,它将阻止循环卡在函数/子进程调用中。

1 个答案:

答案 0 :(得分:2)

您可以使用Popen而不是call在子进程执行时继续使用Python代码。您可以使用signal设置计时器。把它们放在一起就可以了:

def handler(signum, frame):
    raise MyError

signal.signal(signal.SIGALRM, handler)

for i in range(0,n):
    p = subprocess.Popen(...)
    try:
        signal.alarm(1) # 1 second timer
        p.wait()
        signal.alarm(0) # clear the timer
    except MyError:
        p.kill()