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 相关文章推荐
Django 前后台的数据传递的方法
Aug 08 Python
Python动刷新抢12306火车票的代码(附源码)
Jan 24 Python
python实现停车管理系统
Nov 30 Python
python修改txt文件中的某一项方法
Dec 29 Python
使用GitHub和Python实现持续部署的方法
May 09 Python
python变量命名的7条建议
Jul 04 Python
Python pandas用法最全整理
Aug 04 Python
Django 实现前端图片压缩功能的方法
Aug 07 Python
Python虚拟环境venv用法详解
May 25 Python
PHP基于phpqrcode类库生成二维码过程解析
May 28 Python
分布式全文检索引擎ElasticSearch原理及使用实例
Nov 14 Python
微信小程序调用python模型
Apr 21 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
Yii2表单事件之Ajax提交实现方法
2017/05/04 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
JS模拟多线程
2007/02/07 Javascript
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
自定义的一个简单时尚js下拉选择框
2013/11/20 Javascript
js中把JSON字符串转换成JSON对象最好的方法
2014/03/21 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
使用Raygun对Node.js应用进行错误处理的方法
2015/06/23 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
2016/06/07 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
Javascript动画效果(3)
2016/10/11 Javascript
详解webpack介绍&安装&常用命令
2017/06/29 Javascript
关于vue-router的那些事儿
2018/05/23 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
jQuery实现数字自动增加或者减少的动画效果示例
2018/12/11 jQuery
Layui实现主窗口和Iframe层参数传递
2019/11/14 Javascript
Pyhton中防止SQL注入的方法
2015/02/05 Python
解读Python编程中的命名空间与作用域
2015/10/16 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
python中强大的format函数实例详解
2018/12/05 Python
python实现图片中文字分割效果
2019/07/22 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
美国Lolё官网:购买大胆而美丽的女性运动服装
2017/05/22 全球购物
用C语言实现文件读写操作
2013/10/27 面试题
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
大学生学业生涯规划
2014/01/05 职场文书
岳父生日宴会答谢词
2014/01/13 职场文书
门诊手术室工作制度
2014/01/30 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
2015年重阳节慰问信
2015/03/23 职场文书
司机岗位职责范本
2015/04/10 职场文书
员工开除通知书
2015/04/25 职场文书
费城故事观后感
2015/06/10 职场文书
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL