如何实现超时功能?



我试图允许一定的秒数来满足条件。

timeout = time.time() + 15
while SOMETHING NOT MET:
time.sleep(1)
if time.time() > timeout:
raise Exception
continue

这是允许长达 15 秒的正确方法吗?这似乎没有按预期工作。也许有一种更好/更清洁的方法。

按照signal模块文档中给出的示例使用signal.alarm

class TimesUpError(RuntimeException):
pass

def handler(signum, frame):
raise TimesUpError

signal.signal(signal.SIGALRM, handler)
signal.alarm(15)
try:
while SOME_CONDITION:
time.sleep(1)
except TimesUpError:
print("Times up, continuing")
finally:
signal.alarm(0)

根据SOME_CONDITION是什么,您可以使用signal.sigtimedwait而不是循环。

最新更新