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

# 装饰器设置超时时间
# 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. Django和DRF的区别

    Django和DRF的区别 一.Django REST Framwork 和 Django 1.两者的概念: Django REST Framwork: 将数据库的东西通过ORM的映射取出来,通过vi ...

  2. 为什么JAVA中(byte)128结果为-128;(byte)-129结果为127

    为什么JAVA中(byte)128结果为-128;(byte)-129结果为127 在JAVA中默认的整型为int型,int型占4个字节,为32位.byte占一个字节为8位. JAVA中的二进制都是采 ...

  3. WDA学习(21):WDA Popup,Message,Focus

    1.14 WDA Popup,Message,Focus WDA测试Popup,Message,光标Focus功能. 1.创建Component; COMPONENTCONTROLLER页签 Cont ...

  4. ubuntu22.04安装mysql5.7

    22版本的ubuntu默认安装mysql8.0版本,要想安装5.x的版本就得下载安装,这个比较详细的教程,可以参考: https://www.cnblogs.com/juanxincai/p/1648 ...

  5. 046_salesforce 中 Get URL

    Suppose u have the whole URL as: < https://cs14.salesforce.com/apex/myVFpage?id=906F00000008w9wIA ...

  6. 【2020NOI.AC省选模拟#2】A. 旋转

    题目链接 原题解: 把每个点的坐标视为复数,那么每次询问就是区间求平均数(先求和然后除以个数).一个点绕着原点旋转就是乘以$(\cos 60^\circ +i\sin 60^\circ)$. 一个点绕 ...

  7. 非线性优化-SLAM14CP6

    在前声明下面有一部分直接引用高翔老师SLAM14讲中的内容.因为我实在是看不懂.临时放在这里.以后有用到再做详细研究. 在SLAM14讲的CP2中第一次引入运动方程以及观测方程来描述物体带着传感器在空 ...

  8. Flask默认配置参数

    方式一:字段赋值方式导入 1 2 3 4 5 6 7 8 9 10 11 12 13 14 from flask import Flask   app = Flask(__name__)   app. ...

  9. vue后台管理系统——数据统计模块

    电商后台管理系统的功能--数据统计模块 1. 数据统计概述 数据统计模块主要用于统计电商平台运营过程的中的各种统计数据,并通过直观的可视化方式展示出来,方便相关运营和管理人员查看. 2. 用户来源数据 ...

  10. thymeleaf依赖

    <!--thymeleaf模板--> <dependency> <groupId>org.thymeleaf</groupId> <artifac ...