python使用装饰器和线程限制函数执行时间的方法
本文实例讲述了python使用装饰器和线程限制函数执行时间的方法。分享给大家供大家参考。具体分析如下:
很多时候函数内部包含了一些不可预知的事情,比如调用其它软件,从网络抓取信息,可能某个函数会卡在某个地方不动态,这段代码可以用来限制函数的执行时间,只需要在函数的上方添加一个装饰器,timelimited(2)就可以限定函数必须在2秒内执行完成,如果执行完成则返回函数正常的返回值,如果执行超时则会抛出错误信息。
#-*-coding:utf-8-*-
fromthreadingimportThread
importtime
classTimeoutException(Exception):
pass
ThreadStop=Thread._Thread__stop#获取私有函数
deftimelimited(timeout):
defdecorator(function):
defdecorator2(*args,**kwargs):
classTimeLimited(Thread):
def__init__(self,_error=None,):
Thread.__init__(self)
self._error=_error
defrun(self):
try:
self.result=function(*args,**kwargs)
exceptException,e:
self._error=e
def_stop(self):
ifself.isAlive():
ThreadStop(self)
t=TimeLimited()
t.start()
t.join(timeout)
ifisinstance(t._error,TimeoutException):
t._stop()
raiseTimeoutException('timeoutfor%s'%(repr(function)))
ift.isAlive():
t._stop()
raiseTimeoutException('timeoutfor%s'%(repr(function)))
ift._errorisNone:
returnt.result
returndecorator2
returndecorator
@timelimited(2)
deffn_1(secs):
time.sleep(secs)
return'Finished'
if__name__=="__main__":
printfn_1(4)
希望本文所述对大家的Python程序设计有所帮助。