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的Flask框架下使用sqlalchemy库的简单教程
Apr 09 Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
Jan 20 Python
python算法表示概念扫盲教程
Apr 13 Python
python生成随机图形验证码详解
Nov 08 Python
TensorFlow搭建神经网络最佳实践
Mar 09 Python
Python3中的json模块使用详解
May 05 Python
Sanic框架配置操作分析
Jul 17 Python
Django添加favicon.ico图标的示例代码
Aug 07 Python
用python建立两个Y轴的XY曲线图方法
Jul 08 Python
Python如何基于selenium实现自动登录博客园
Dec 16 Python
浅谈keras 模型用于预测时的注意事项
Jun 27 Python
详解Python利用configparser对配置文件进行读写操作
Nov 03 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
用libTemplate实现静态网页的生成
2006/10/09 PHP
PHP中对数据库操作的封装
2006/10/09 PHP
PHP 学习路线与时间表
2010/02/21 PHP
PHP积分兑换接口实例
2015/02/09 PHP
深入剖析浏览器退出之后php还会继续执行么
2016/05/17 PHP
laravel中的错误与日志用法详解
2016/07/26 PHP
基于PHP实现短信验证码接口(容联运通讯)
2016/09/06 PHP
Laravel框架查询构造器简单示例
2019/05/08 PHP
让getElementsByName适应IE和firefox的方法
2007/09/24 Javascript
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
jquery一般方法介绍 入门参考
2011/06/21 Javascript
JS特权方法定义作用以及与公有方法的区别
2013/03/18 Javascript
用js实现博客打赏功能
2016/10/24 Javascript
Bootstrap基本组件学习笔记之缩略图(13)
2016/12/08 Javascript
微信小程序 增、删、改、查操作实例详解
2017/01/13 Javascript
vue.js中Vue-router 2.0基础实践教程
2017/05/08 Javascript
js制作简单的音乐播放器的示例代码
2017/08/28 Javascript
深入浅析Vue.js计算属性和侦听器
2018/05/05 Javascript
vue axios请求频繁时取消上一次请求的方法
2018/11/10 Javascript
jQuery实现动态生成年月日级联下拉列表示例
2019/05/11 jQuery
python 获取文件列表(或是目录例表)
2009/03/25 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
pycharm 配置远程解释器的方法
2018/10/28 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
python程序控制NAO机器人行走
2019/04/29 Python
python3+PyQt5 实现Rich文本的行编辑方法
2019/06/17 Python
Python如何定义有可选参数的元类
2020/07/31 Python
美国值得信赖的婚恋交友网站:eHarmony
2018/10/04 全球购物
数据员岗位职责
2013/11/19 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
八一建军节慰问信
2015/02/14 职场文书
十八大观后感
2015/06/12 职场文书
致短跑运动员加油稿
2015/07/21 职场文书
认识实习感想
2015/08/10 职场文书
八年级作文之感恩
2019/11/22 职场文书
Mysql排序的特性详情
2021/11/01 MySQL