网络编程
位置:首页>> 网络编程>> Python编程>> python使用装饰器和线程限制函数执行时间的方法

python使用装饰器和线程限制函数执行时间的方法

作者:lele  发布时间:2022-04-03 04:06:34 

标签:python,函数,执行

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

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


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

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com