我有一个循环
while somecondition:
dostuff
Run Code Online (Sandbox Code Playgroud)
(对不起.很难给出一个可执行的例子,因为这是一个更大的项目的一部分).
大多数情况下,在短时间内满足条件并且循环到期.但有时候这种情况永远不会得到满足.我怎样才能最好地抓住这种情况?计时器是最好的选择吗?我怎样才能最好地实现它?
您可以使用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)
这将设置一个信号处理程序,它只是引发一个自定义异常(但你可以使用任何异常),然后捕获它.