为while循环实现超时的最佳方法

Agu*_*guy 2 python time

我有一个循环

while somecondition:
    dostuff
Run Code Online (Sandbox Code Playgroud)

(对不起.很难给出一个可执行的例子,因为这是一个更大的项目的一部分).

大多数情况下,在短时间内满足条件并且循环到期.但有时候这种情况永远不会得到满足.我怎样才能最好地抓住这种情况?计时器是最好的选择吗?我怎样才能最好地实现它?

Kei*_*ith 8

您可以使用SIGALRM使用超时.这是一个演示它的小程序.

import sys

import time
import signal


class TimeoutError(Exception):
    pass

def _sig_alarm(sig, tb):
    raise TimeoutError("timeout")

def main(argv):
    timeout = 7
    signal.signal(signal.SIGALRM, _sig_alarm)
    try:
        signal.alarm(timeout)
        while True:
            print("sleeping...")
            time.sleep(1)
    except TimeoutError:
        pass
    print("Out of loop.")



main(sys.argv)
Run Code Online (Sandbox Code Playgroud)

这将设置一个信号处理程序,它只是引发一个自定义异常(但你可以使用任何异常),然后捕获它.