python使用装饰器和线程限制函数执行时间的方法
2015-04-18 14:25
896 查看
本文实例讲述了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程序设计有所帮助。
您可能感兴趣的文章:
相关文章推荐
- Python使用装饰器和线程限制函数执行时间的方法
- Python: 使用装饰器“@”取得函数执行时间
- Python: 使用装饰器“@”取得函数执行时间
- 分享:python,限制任意函数,线程的执行时间或根据条件终止.
- python 8-1 如何使用多线程,Thread创建线程,执行函数赋值给target//类+函数放在run方法中执行
- python 限制函数执行时间,自己实现 timeout
- python使用threading获取线程函数返回值的实现方法
- Python学习23:函数装饰器的使用(方法重用)
- 线程同时执行一个函数 使用临界区 14.4.29
- C/C++时间函数使用方法
- C/C++时间函数使用方法
- 浅析python 内置字符串处理函数的使用方法
- 浅析python 内置字符串处理函数的使用方法
- Linux 时间函数之 gettimeofday() 函数之使用方法
- 使用限制函数执行频率的函数代理
- Python使用函数默认值实现函数静态变量的方法
- Python使用函数默认值实现函数静态变量的方法
- Linux时间函数C++之gettimeofday()函数之使用方法
- C/C++时间函数使用方法
- Linux时间函数之gettimeofday()函数之使用方法