Python, Timeout of Try, Except Statement after X number of seconds?
我一直在寻找这个,但似乎无法找到一个确切的答案(大多数进入更复杂的事情,如多线程等),我只是想做一些像Try,Except声明,如果过程没有完成 在X秒内,它将抛出异常。
编辑:原因是我使用的网站测试软件(selenium)的配置有时会导致它挂起。 它不会抛出错误,不会超时或做任何事情,所以我无法捕获它。 我想知道最好的方法是确定这已经发生了所以我可以继续我的应用程序,所以我在想我是否可以做一些事情,"如果这还没有完成X秒......继续前进"。
如果没有某种多线程或多处理,你就无法做到这一点,即使它隐藏在某些抽象层之下,除非你正在运行的"进程"是专门为异步性设计的,并且偶尔回调一个已知的函数。
如果您描述该过程实际上是什么,那么提供真正的解决方案会更容易。我不认为你欣赏Python的强大功能,它涉及到完整的简洁实现。即使使用多线程/多处理,也可能只需要几行代码即可实现。
答案(和问题)并不特定于try / except语句。如果你想要一个不是无限的无限循环(但在一段时间后停止),它可能不应该是无限的。例如,将其更改为使用:
1 | while time <= some_value: |
或者在循环体上添加一个额外的检查,使其在您希望停止时中断:
1 2 3 4 | while True: ... if time > some_value: break |
如果那是不可能的(例如,因为你根本不控制循环),事情会变得更加困难。在许多系统上,您可以使用
如果您使用的是UNIX的通用解决方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import time as time import signal #Close session def handler(signum, frame): print 1 raise Exception('Action took too much time') signal.signal(signal.SIGALRM, handler) signal.alarm(3) #Set the parameter to the amount of seconds you want to wait try: #RUN CODE HERE for i in range(0,5): time.sleep(1) except: print 2 signal.alarm(10) #Resets the alarm to 10 new seconds signal.alarm(0) #Disables the alarm |