#************************************************************** 设置超时的装饰器 **************************************************************

# 装饰器设置超时时间
# class TimeoutException(Exception):
# pass
# ThreadStop = Thread._Thread__stop
#
# def set_timeout_limit(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 = str(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

# # 装饰器设置超时时间
# def set_timeout_limit(t):
# def auto_quit(t1):
# '''此为控制进程超时退出的线程函数'''
# time.sleep(t1)
# print("time out {}".format(t1))
# os._exit(1) #此函数专门用于线程控制主进程退出,有兴趣的可以看一下和sys.exit()的区别
# def decorator(f):
# '''此函数用于传入被装饰函数f'''
# @wraps(f)
# def wrapper(*args,**kwargs):
# '''装饰器内部遵循的逻辑是:
# 1.auto_quit先执行完,进程结束
# 2.被修饰函数f先执行完,auto_quit函数停止执行
# 3.被修饰函数执行完,下面的代码才能运行
# '''
# t1=Thread(target=auto_quit,args=(t,)) #此处的t是set_time_limit函数的形参,是auto_quit函数的实参
# t2=Thread(target=f,args=args,kwargs=kwargs)
# t1.setDaemon(True) #满足第2点
# t1.start()
# t2.start()
# t2.join() #满足第3点
# return wrapper
# return decorator

***还有一种方法,多线程设置成守护线程。主线程退出,其他线程也会退出。达到超时退出的目的。

python 超时装饰器的更多相关文章

  1. 两个实用的Python的装饰器

    两个实用的Python的装饰器 超时函数 这个函数的作用在于可以给任意可能会hang住的函数添加超时功能,这个功能在编写外部API调用 .网络爬虫.数据库查询的时候特别有用 timeout装饰器的代码 ...

  2. python学习---装饰器

    什么是装饰器 器即函数 装饰即修饰,意指为其他函数添加新功能 装饰器定义:本质就是函数,功能是为其他函数添加新功能 装饰器需要遵循的原则 1.不修改被装饰函数的源代码(开放封闭原则) 2.为被装饰函数 ...

  3. 【转】Python之装饰器

    [转]Python之装饰器 本节内容 必要知识回顾 情景模拟 装饰器的概念及实现原理 回马枪(带参数的装饰器) 一. 必要知识回顾 在开始说装饰器之前,需要大家熟悉之前说过的相关知识点: 函数即“变量 ...

  4. Python各式装饰器

    Python装饰器,分两部分,一是装饰器本身的定义,一是被装饰器对象的定义. 一.函数式装饰器:装饰器本身是一个函数. 1.装饰函数:被装饰对象是一个函数 [1]装饰器无参数: a.被装饰对象无参数: ...

  5. Python札记 -- 装饰器补充

    本随笔是对Python札记 -- 装饰器的一些补充. 使用装饰器的时候,被装饰函数的一些属性会丢失,比如如下代码: #!/usr/bin/env python def deco(func): def ...

  6. python基础——装饰器

    python基础——装饰器 由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数. >>> def now(): ... print('2015-3-25 ...

  7. 【转】详解Python的装饰器

    原文链接:http://python.jobbole.com/86717/ Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现 ...

  8. python 基础——装饰器

    python 的装饰器,其实用到了以下几个语言特点: 1. 一切皆对象 2. 函数可以嵌套定义 3. 闭包,可以延长变量作用域 4. *args 和 **kwargs 可变参数 第1点,一切皆对象,包 ...

  9. 理解Python中的装饰器//这篇文章将python的装饰器来龙去脉说的很清楚,故转过来存档

    转自:http://www.cnblogs.com/rollenholt/archive/2012/05/02/2479833.html 这篇文章将python的装饰器来龙去脉说的很清楚,故转过来存档 ...

  10. python基础—装饰器

    python基础-装饰器 定义:一个函数,可以接受一个函数作为参数,对该函数进行一些包装,不改变函数的本身. def foo(): return 123 a=foo(); b=foo; print(a ...

随机推荐

  1. 【论文写作】Vancouver style

    参考文献引用风格之 Vancouver style 需要在引用出使用阿拉伯数字(1,2,3...)标注参考文献序号. 示例: Deep Learning [1]. Reference [1] LeCu ...

  2. mysql清理库中所有表的数据

    SELECT CONCAT('truncate table ',TABLE_NAME,';') AS a FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHE ...

  3. python实现字典的排序

    var dic = {c:4, a:2, d:3, b:1}; // 定义一个字典 console.log("输出最初的字典元素: "); for(var key in dic){ ...

  4. Oracle修改查询优化器版本

    查询优化器参数optimizer_features_enable 在每个数据库版本中,Oracle都会在查询优化器中引入或启用新的特性. 如果在升级到一个新的版本后希望保留查询优化器的行为,可以通过设 ...

  5. git拉取本地或者分支

    拉取本地 git clone 拉取的仓库地址 新建一个文件夹,然后右键 拉取分支到本地 也是新建一个文件夹右键点击 Git Bash Here 然后输入 git clone -b 分支名称 分支地址 ...

  6. Unity中的批处理优化与GPU Instancing【转】

    我们都希望能够在场景中投入一百万个物体,不幸的是,渲染和管理大量的游戏对象是以牺牲CPU和GPU性能为代价的,因为有太多Draw Call的问题,最后我们必须找到其他的解决方案.在本文中,我们将讨论两 ...

  7. C# IOC 个人理解

    学习QFramework 过程中发现对IOC不太了解,就大概百度了一下思路 将原先类与类之间的相互依赖关系,转移到第三方容器中, 同过读取配置文件来生成对应的依赖关系,将原本类之间的耦合转移到配置文件 ...

  8. iOS开发之UIImage压缩处理

    IOS中UIImage的数据量压缩有两种方式,一种是图片尺寸不变,降低图片分辨率,代码方法为: //1.0为压缩系数,介于0~1之间.压缩系数越小,会大大降低图片清晰度 NSData *data = ...

  9. centos7编译安装LNMP服务架构

    CentOS7.4 源码编译安装LNMP  1.基于CentOS7.4源码编译安装得lnmp 系统环境CentOS 7.4 系统最小化安装,只安装了一些常用包(vim.lirzs.gcc*.wget. ...

  10. tomcat的安装以及环境配置

    1.Tomcat的下载地址:http://tomcat.apache.org/ Tomcat是开放源代码的WEB服务器,安装时,只需解压压缩包即可 2.环境变量的配置 1>新建系统变量CATAL ...