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


Posted in Python onApril 18, 2015

本文实例讲述了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检测手机QQ在线状态的脚本代码
Feb 10 Python
Python编程中的for循环语句学习教程
Oct 14 Python
Python实现excel转sqlite的方法
Jul 17 Python
Python聊天室程序(基础版)
Apr 01 Python
基于python中theano库的线性回归
Aug 31 Python
详解django自定义中间件处理
Nov 21 Python
Python3 log10()函数简单用法
Feb 19 Python
python3使用matplotlib绘制散点图
Mar 19 Python
python中break、continue 、exit() 、pass终止循环的区别详解
Jul 08 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
Aug 20 Python
python装饰器原理与用法深入详解
Dec 19 Python
pandas进行数据输入和输出的方法详解
Mar 23 Python
python使用multiprocessing模块实现带回调函数的异步调用方法
Apr 18 #Python
python对指定目录下文件进行批量重命名的方法
Apr 18 #Python
python开启多个子进程并行运行的方法
Apr 18 #Python
C#返回当前系统所有可用驱动器符号的方法
Apr 18 #Python
python关闭windows进程的方法
Apr 18 #Python
python使用Queue在多个子进程间交换数据的方法
Apr 18 #Python
python获取当前计算机cpu数量的方法
Apr 18 #Python
You might like
PHP 页面编码声明方法详解(header或meta)
2010/03/12 PHP
PHP中实现获取IP和地理位置类分享
2015/02/10 PHP
ThinkPHP文件缓存类代码分享
2015/04/22 PHP
PHP文件操作实例总结
2016/09/27 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
2019/05/06 PHP
RR vs IO BO3 第二场2.13
2021/03/10 DOTA
7款风格新颖的jQuery/CSS3菜单导航分享
2013/04/23 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
2014/06/15 Javascript
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
jQuery可见性过滤选择器用法示例
2016/09/09 Javascript
利用React-router+Webpack快速构建react程序
2016/10/27 Javascript
seajs下require书写约定实例分析
2018/05/16 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
2018/09/04 Javascript
原生js实现轮播图特效
2020/05/04 Javascript
python中去空格函数的用法
2014/08/21 Python
Python格式化压缩后的JS文件的方法
2015/03/05 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
在Python的Django框架中生成CSV文件的方法
2015/07/22 Python
Python基于回溯法子集树模板解决m着色问题示例
2017/09/07 Python
Python读取excel中的图片完美解决方法
2018/07/27 Python
解决pycharm工程启动卡住没反应的问题
2019/01/19 Python
python3字符串操作总结
2019/07/24 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
2019/12/25 Python
sklearn的predict_proba使用说明
2020/06/28 Python
pycharm全局搜索的具体步骤
2020/07/28 Python
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
德国BA保镖药房韩文网:kr.ba.de
2017/09/04 全球购物
英国最大的在线时尚眼镜店:Eyewearbrands
2019/03/12 全球购物
莫斯科购买书籍网站:Book24
2020/01/12 全球购物
企业车辆管理制度
2014/01/24 职场文书
爱心活动计划书
2014/04/26 职场文书
总经理岗位职责说明书
2014/07/30 职场文书
新颖的化妆品活动方案
2014/08/21 职场文书
银行给客户的感谢信
2015/01/23 职场文书
返乡农民工证明
2015/06/24 职场文书
聊聊Python String型列表求最值的问题
2022/01/18 Python