是否有一种明确的方法来创建像signal
模块这样的超时功能但与Windows兼容?感谢
答案 0 :(得分:0)
是的,它可以在没有信号的窗口中完成,也可以在其他操作系统中使用。逻辑是创建一个新线程并等待给定时间并使用_thread(在python3中为python2中的线程)引发异常。如果发生任何异常,将在主线程中抛出该异常,并且with块将退出。
import threading
import _thread # import thread in python2
class timeout():
def __init__(self, time):
self.time= time
self.exit=False
def __enter__(self):
threading.Thread(target=self.callme).start()
def callme(self):
time.sleep(self.time)
if self.exit==False:
_thread.interrupt_main() # use thread instead of _thread in python2
def __exit__(self, a, b, c):
self.exit=True
用法示例:-
with timeout(2):
print("abc")
#other stuff here
with块中的程序应在2秒内退出,否则它将在2秒后退出。