首页 > 编程语言 >python 执行超时装饰器

python 执行超时装饰器

时间:2023-07-10 14:56:09浏览次数:37  
标签:return python signal alarm timeout 超时 装饰 def

代码:

import signal

class TimeoutError(Exception):
    pass

def timeout(seconds=10, error_message='Timeout'):
    def decorator(func):
        def wrapper(*args, **kwargs):
            def _handle_timeout(signum, frame):
                raise TimeoutError(error_message)

            signal.signal(signal.SIGALRM, _handle_timeout)
            signal.alarm(seconds)

            try:
                result = func(*args, **kwargs)
            finally:
                signal.alarm(0)

            return result

        return wrapper

    return decorator

Python 信号处理程序总是会在主 Python 主解释器的主线程中执行,即使信号是在另一个线程中接收的。

参数说明:image
只能在linux系统运行。

参考文档:
https://docs.python.org/zh-cn/3/library/signal.html

标签:return,python,signal,alarm,timeout,超时,装饰,def
From: https://www.cnblogs.com/yimeimanong/p/17541162.html

相关文章

  • Python的日志
    Python的日志,看上去啰啰嗦嗦的。请大神写了个通俗易懂简单方便通用的日志:importlogging#配置日志记录级别和输出方式logging.basicConfig(level=logging.DEBUG,filename='mylog.log',filemode='w',format='%(asctime)s-%(levelname)s-%(message)s')deflog_exceptio......
  • 西门子免授权CNC数控系统数据采集c#、C、python都支持,可支持再各种操作系统上运行,无须
    西门子数控系统数据采集方案(无需OPC授权方案)西门子数控系统4.5版本及以上集成了工业协议OPCUA,用户可通过OPCUA协议进行设备的数据采集,但是需要西门子授权,而且仅支持828d,828dsl,840dsl本协议可通过原生TCP数据包和数控系统进行通讯,支持各种类型开发语言和操作平台。  西门......
  • python过滤器filter()及lambda表达式的应用
    一、filter()方法介绍:filter()是Python内置的一个函数,用于根据指定的条件对可迭代对象进行筛选,返回符合条件的元素。filter()函数的语法如下:filter(function,iterable)其中function是一个函数或可调用对象,表示用于判断每个元素是否符合条件的函数。iterable则是一个可......
  • 使用多级蒙特卡洛方法加速电力系统风险分析充分性评估python源代码,文章对应代码,保证正
    使用多级蒙特卡洛方法加速电力系统风险分析充分性评估python源代码,文章对应代码,保证正确阐述了MLMC方法如何应用于电力系统风险分析,特别是系统充分性评估问题。确定了特别适合MLMC实现的通用模型模式,并引入了计算速度度量,以一种易于在工具、蒙特卡罗方法和风险度量之间进行比较的......
  • Python | os.makedirs函数的使用
    概述os.makedirs()方法用于递归创建目录。如果子目录创建失败或者已经存在,会抛出一个OSError的异常,Windows上Error183即为目录已经存在的异常错误。如果第一个参数path只有一级,则mkdir()函数相同。语法makedirs()方法语法格式如下:os.makedirs(path,mode=0o777)参......
  • Windows下安装python2和python3双版本及问题解决
    现在大家常用的桌面操作系统有:Windows、MacOS、ubuntu,其中MacOS和ubuntu上都会自带python。这里我们只介绍下Windows(我用的Win10)环境下的python2.x和python3.x的安装,以及python2.x与python3.x共存时的配置问题。本节内容python下载安装Python2.x安装Python3.x当前存......
  • python笔记:第五章条件循环语句
    1.print和import1.1打印多个参数同时打印多个表达式,用逗号分隔print('age:',42)>age:13#注意两个表达式之间有空格不加空格的输出方式print('block'+'chain')>blockchain自定义分隔符print('L','M','C',sep='-')>L......
  • python学习巩固一(基础语法)
    大学四年毕业,对于计算机还是一头雾水,现在准备去读研了,导师要求我好好掌握python,突然回想到我学python的时候曾注册过博客园,哈哈哈,找回密码后发现我账号竟然有三个粉丝,某些阅读量还挺高的,感谢感谢。为了督促自己这次能认认真真再好好学习python,我又开始弄我的博客园了,现在从零开始,......
  • python基础
    1.函数1.1禁止函数修改列表列表是可以修改的,把列表作为参数传给函数,如果在函数中对列表进行了修改,那么这个列表就发生了改变。为了防止函数修改列表,我们可以使用切片表示法[:]创建列表的副本,将列表的副本作为函数参数deffunction_name(list_name[:]):#函数体......
  • Python中列表的使用
    列表是可变的,它跟字符串和元组最重要的区别:列表可以修改,而字符串和元组不能。列表的方法:list.append(x):把一个元素添加到列表的结尾。list.extend(L):通过添加指定列表的所有元素来扩充列表。list.insert(i,x):在指定位置插入一个元素,例如a.insert(0,x)会把x插入到整个列表......