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爬虫爬取一个网页上的图片地址实例代码
Jan 16 Python
tensorflow训练中出现nan问题的解决
Feb 10 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
Apr 26 Python
对python中的xlsxwriter库简单分析
May 04 Python
Python实现的连接mssql数据库操作示例
Aug 17 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
Sep 25 Python
python实现输入任意一个大写字母生成金字塔的示例
Oct 27 Python
python实现高斯判别分析算法的例子
Dec 09 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
Mar 30 Python
win10安装python3.6的常见问题
Jul 01 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
Aug 07 Python
Python中常见的导入方式总结
May 06 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数组 为文章加关键字连接 文章内容自动加链接
2011/12/29 PHP
php管理nginx虚拟主机shell脚本实例
2014/11/19 PHP
php操作xml入门之cdata区段
2015/01/23 PHP
laravel5 Eloquent 实现事务方式
2019/10/21 PHP
发现的以前不知道的函数
2006/09/19 Javascript
传智播客学习之java 反射
2009/11/22 Javascript
JavaScript高级程序设计 DOM学习笔记
2011/09/10 Javascript
E3 tree 1.6在Firefox下显示问题的修复方法
2013/01/30 Javascript
网页中返回顶部代码(多种方法)另附注释说明
2013/04/24 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
js如何准确获取当前页面url网址信息
2020/09/13 Javascript
jQuery插件formValidator实现表单验证
2016/05/23 Javascript
JavaScript中 DOM操作方法小结
2017/04/25 Javascript
nodejs简单访问及操作mysql数据库的方法示例
2018/03/15 NodeJs
JavaScript 2018 中即将迎来的新功能
2018/09/21 Javascript
浅谈JavaScript中的“!!”作用
2020/08/03 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
用Python中的__slots__缓存资源以节省内存开销的方法
2015/04/02 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
Python脚本处理空格的方法
2016/08/08 Python
Python内建函数之raw_input()与input()代码解析
2017/10/26 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
2019/02/22 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
浅谈Python 命令行参数argparse写入图片路径操作
2020/07/12 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
2021/01/30 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
Yves Rocher伊夫·黎雪美国官网:法国始创植物美肌1959
2019/01/09 全球购物
数据员岗位职责
2013/11/19 职场文书
合唱兴趣小组活动总结
2014/07/10 职场文书
中国在我心中演讲稿
2014/09/13 职场文书
2014年招商引资工作总结
2014/11/22 职场文书
2015年环卫工作总结
2015/04/28 职场文书
第一军规观后感
2015/06/12 职场文书
用Python编写简单的gRPC服务的详细过程
2021/07/04 Python
德生TECSUN S-2000使用手册文字版
2022/05/10 无线电