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程序设计有所帮助。