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实现无证书加密解密实例
Oct 27 Python
Python中super关键字用法实例分析
May 28 Python
使用Python读取二进制文件的实例讲解
Jul 09 Python
python 使用plt画图,去除图片四周的白边方法
Jul 09 Python
python for循环remove同一个list过程解析
Aug 14 Python
python多线程扫描端口(线程池)
Sep 04 Python
python实现简单俄罗斯方块
Mar 13 Python
Tensorflow加载Vgg预训练模型操作
May 26 Python
pycharm专业版远程登录服务器的详细教程
Sep 15 Python
python获得命令行输入的参数的两种方式
Nov 02 Python
python 删除系统中的文件(按时间,大小,扩展名)
Nov 19 Python
Django使用django-simple-captcha做验证码的实现示例
Jan 07 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面向对象public private protected 访问修饰符
2013/06/30 PHP
php通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
PHP ajax 异步执行不等待执行结果的处理方法
2015/05/27 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
js中将多个语句写成一个语句的两种方法小结
2007/12/08 Javascript
NodeJS学习笔记之网络编程
2014/08/03 NodeJs
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
javascript实现复选框选中属性
2015/03/25 Javascript
avalonjs制作响应式瀑布流特效
2015/05/06 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
2016/02/23 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
nodejs通过钉钉群机器人推送消息的实现代码
2019/05/05 NodeJs
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
2017/02/13 Python
Python爬虫将爬取的图片写入world文档的方法
2018/11/07 Python
django echarts饼图数据动态加载的实例
2019/08/12 Python
Python制作简易版小工具之计算天数的实现思路
2020/02/13 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
2020/02/28 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
2020/05/17 Python
通过代码简单了解django model序列化作用
2020/11/12 Python
高职助产应届生自荐信
2013/09/24 职场文书
企业统计员岗位职责
2013/12/13 职场文书
学生周末回家住宿长期请假条
2014/02/15 职场文书
土木工程专业推荐信
2014/02/19 职场文书
学雷锋演讲稿汇总
2014/05/10 职场文书
环卫工人节活动总结
2014/08/29 职场文书
法人委托书的范本格式
2014/09/11 职场文书
高中课前三分钟演讲稿
2014/09/13 职场文书
电工实训报告总结
2014/11/05 职场文书
结婚老公保证书
2015/02/26 职场文书
大国崛起英国观后感
2015/06/02 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
《这片土地是神圣的》教学反思
2016/02/16 职场文书
Rust中的Struct使用示例详解
2022/08/14 Javascript