Python中的超时功能(适用于Windows)

时间:2017-01-27 19:37:37

标签: python multithreading

是否有一种明确的方法来创建像signal模块这样的超时功能但与Windows兼容?感谢

1 个答案:

答案 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秒后退出。