各位用户为了找寻关于python使用装饰器和线程限制函数执行时间的方法的资料费劲了很多周折。这里教程网为您整理了关于python使用装饰器和线程限制函数执行时间的方法的相关资料,仅供查阅,以下为您介绍关于python使用装饰器和线程限制函数执行时间的方法的详细内容

本文实例讲述了python使用装饰器和线程限制函数执行时间的方法。分享给大家供大家参考。具体分析如下:

很多时候函数内部包含了一些不可预知的事情,比如调用其它软件,从网络抓取信息,可能某个函数会卡在某个地方不动态,这段代码可以用来限制函数的执行时间,只需要在函数的上方添加一个装饰器,timelimited(2)就可以限定函数必须在2秒内执行完成,如果执行完成则返回函数正常的返回值,如果执行超时则会抛出错误信息。

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 # -*- coding: utf-8 -*- from threading import Thread import time class TimeoutException(Exception):   pass ThreadStop = Thread._Thread__stop#获取私有函数 def timelimited(timeout):   def decorator(function):     def decorator2(*args,**kwargs):       class TimeLimited(Thread):         def __init__(self,_error= None,):           Thread.__init__(self)           self._error = _error         def run(self):           try:             self.result = function(*args,**kwargs)           except Exception,e:             self._error =e         def _stop(self):           if self.isAlive():             ThreadStop(self)       t = TimeLimited()       t.start()       t.join(timeout)       if isinstance(t._error,TimeoutException):         t._stop()         raise TimeoutException('timeout for %s' % (repr(function)))       if t.isAlive():         t._stop()         raise TimeoutException('timeout for %s' % (repr(function)))       if t._error is None:         return t.result     return decorator2   return decorator @timelimited(2) def fn_1(secs):   time.sleep(secs)   return 'Finished' if __name__ == "__main__":   print fn_1(4)

希望本文所述对大家的Python程序设计有所帮助。