2024-05-16 04:34:52 发布
网友
我有一段时间的循环
while somecondition: dostuff
(对不起。很难给出一个可执行的例子,因为这是一个更大项目的一部分)。
大多数情况下,条件在很短的一段时间后满足,循环将过期。但有时这种条件永远无法满足。我怎样才能最好地抓住这些案子?计时器是最好的选择吗?如何才能最好地实现它?
等一个小时的例子
from datetime import timedelta delete_TO = 1 wait_until = datetime.now() + timedelta(hours=delete_TO) break_loop = False while not break_loop: do-your loop-stuff if wait_until < datetime.now() or somecondition: break_loop = True
(已编辑:wait_until必须小于datetime.now())
您可以使用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)
这将设置一个信号处理程序,该处理程序只会引发一个自定义异常(但您可以使用任何异常),然后捕获它。
正确答案是
此代码是从@ohad_lad(https://stackoverflow.com/users/2468201/ohad-the-lad)答案复制粘贴的,但它修复了如果wait_until大于datetime.now()则循环退出的意外错误,而该错误将始终发生。
等一个小时的例子
(已编辑:wait_until必须小于datetime.now())
您可以使用SIGALRM超时。这里有一个小程序来演示。
这将设置一个信号处理程序,该处理程序只会引发一个自定义异常(但您可以使用任何异常),然后捕获它。
正确答案是
此代码是从@ohad_lad(https://stackoverflow.com/users/2468201/ohad-the-lad)答案复制粘贴的,但它修复了如果wait_until大于datetime.now()则循环退出的意外错误,而该错误将始终发生。
相关问题 更多 >
编程相关推荐