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 CSV模块使用实例
Apr 09 Python
使用Python脚本来控制Windows Azure的简单教程
Apr 16 Python
基于Django用户认证系统详解
Feb 21 Python
Python实现的基于优先等级分配糖果问题算法示例
Apr 25 Python
对python打乱数据集中X,y标签对的方法详解
Dec 14 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
Feb 26 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
Jun 21 Python
python爬虫 2019中国好声音评论爬取过程解析
Aug 26 Python
Python中求对数方法总结
Mar 10 Python
pandas dataframe 中的explode函数用法详解
May 18 Python
python爬取网易云音乐热歌榜实例代码
Aug 07 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
Aug 19 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&java(二)
2006/10/09 PHP
Windows下的PHP5.0详解
2006/11/18 PHP
常用的php对象类型判断
2008/08/27 PHP
使用Discuz关键词服务器实现PHP中文分词
2014/03/11 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
2010/10/22 Javascript
js split 的用法和定义 js split分割字符串成数组的实例代码
2012/05/13 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
详解Javascript 装载和执行
2014/11/17 Javascript
浅谈javascript中return语句
2015/07/15 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
2016/07/11 Javascript
关于jQuery EasyUI 中刷新Tab选项卡后一个页面变形的解决方法
2017/03/02 Javascript
vue2过滤器模糊查询方法
2018/09/16 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
JavaScript实现拖拽功能
2020/02/11 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
2020/07/20 Javascript
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
Python脚本实现下载合并SAE日志
2015/02/10 Python
Python将多个excel文件合并为一个文件
2018/01/03 Python
win10系统下Anaconda3安装配置方法图文教程
2018/09/19 Python
python使用插值法画出平滑曲线
2018/12/15 Python
对python生成业务报表的实例详解
2019/02/03 Python
python3实现的zip格式压缩文件夹操作示例
2019/08/17 Python
美国宠物商店:Wag.com
2016/10/25 全球购物
欧舒丹英国官网:购买欧舒丹护手霜等明星产品
2017/01/17 全球购物
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
国际性能运动服装品牌:Dare 2b
2018/07/27 全球购物
英国时尚优质的女装:Hope Fashion
2018/08/14 全球购物
医院辞职信范文
2014/01/17 职场文书
餐饮投资计划书
2014/04/25 职场文书
文明村镇申报材料
2014/05/06 职场文书
代办社保委托书范文
2014/10/06 职场文书
2014年财务工作总结与计划
2014/12/08 职场文书
违纪检讨书
2015/01/27 职场文书
如何写一份成功的商业计划书
2019/06/25 职场文书