本文实例讲述了python使用装饰器和线程限制函数执行时间的方法。分享给大家供大家参考。具体分析如下:
很多时候函数内部包含了一些不可预知的事情,比如调用其它软件,从网络抓取信息,可能某个函数会卡在某个地方不动态,这段代码可以用来限制函数的执行时间,只需要在函数的上方添加一个装饰器,timelimited(2)就可以限定函数必须在2秒内执行完成,如果执行完成则返回函数正常的返回值,如果执行超时则会抛出错误信息。
# -*- coding: utf-8 -*-from threading import Threadimport timeclass TimeoutException(Exception): passThreadStop = 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 = _errordef run(self):try:self.result = function(*args,**kwargs)except Exception,e:self._error =edef _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.resultreturn decorator2 return decorator@timelimited(2)def fn_1(secs): time.sleep(secs) return 'Finished'if __name__ == "__main__": print fn_1(4)
希望本文所述对大家的Python程序设计有所帮助。
新闻热点
疑难解答