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中使用ConfigParser解析ini配置文件实例
Aug 30 Python
python中偏函数partial用法实例分析
Jul 08 Python
基于python(urlparse)模板的使用方法总结
Oct 13 Python
Django中ORM表的创建和增删改查方法示例
Nov 15 Python
Python使用pip安装pySerial串口通讯模块
Apr 20 Python
在Python中分别打印列表中的每一个元素方法
Nov 07 Python
python生成每日报表数据(Excel)并邮件发送的实例
Feb 03 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
Aug 14 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
Jan 16 Python
Python实现猜年龄游戏代码实例
Mar 25 Python
python读取hdfs上的parquet文件方式
Jun 06 Python
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Jun 08 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空值检测函数与方法汇总
2017/11/19 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
最新28个很棒的jQuery 教程
2011/05/28 Javascript
JSON语法五大要素图文介绍
2012/12/04 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
2013/12/04 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
js实现Select列表各项上移和下移的方法
2015/08/14 Javascript
js验证真实姓名与身份证号是否匹配
2015/10/13 Javascript
js+css实现select的美化效果
2016/03/24 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
vue+iview 实现可编辑表格的示例代码
2018/10/31 Javascript
Node绑定全局TraceID的实现方法
2019/11/14 Javascript
JS通过识别id、value值对checkbox设置选中状态
2020/02/19 Javascript
Vue性能优化的方法
2020/07/30 Javascript
Vue通过Blob对象实现导出Excel功能示例代码
2020/07/31 Javascript
python迭代器实例简析
2014/09/25 Python
详解Python中with语句的用法
2015/04/15 Python
在Python下尝试多线程编程
2015/04/28 Python
Python堆排序原理与实现方法详解
2018/05/11 Python
Python 隐藏输入密码时屏幕回显的实例
2019/02/19 Python
Python3利用print输出带颜色的彩色字体示例代码
2019/04/08 Python
详解python--模拟轮盘抽奖游戏
2019/04/12 Python
Pandas透视表(pivot_table)详解
2019/07/22 Python
利用jupyter网页版本进行python函数查询方式
2020/04/14 Python
python属于哪种语言
2020/08/16 Python
详解Python流程控制语句
2020/10/28 Python
python爬虫今日热榜数据到txt文件的源码
2021/02/23 Python
基于html5 canvas做批改作业的小插件
2020/05/20 HTML / CSS
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
YII2 全局异常处理深入讲解
2021/03/24 PHP
学生党支部先进事迹
2014/02/04 职场文书
土木工程专业推荐信
2014/02/19 职场文书
付款委托书范本
2014/04/04 职场文书
城管年度个人总结
2015/02/28 职场文书
家长会感言
2015/08/01 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers