首页 > 其他分享 >timeout 装饰器

timeout 装饰器

时间:2023-11-20 19:34:12浏览次数:32  
标签:return timeout signal sec func 装饰 def

import functools
import signal


def timeout(sec):
    """
    timeout decorator
    :param sec: function raise TimeoutError after ? seconds
    """
    def decorator(func):
        @functools.wraps(func)
        def wrapped_func(*args, **kwargs):

            def _handle_timeout(signum, frame):
                err_msg = f'Function {func.__name__} timed out after {sec} seconds'
                raise TimeoutError(err_msg)

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

        return wrapped_func
    return decorator

在函数上面加
@timeout(120)就行

标签:return,timeout,signal,sec,func,装饰,def
From: https://www.cnblogs.com/avivi/p/17844668.html

相关文章

  • Python装饰器-计算运行时间小例子
    importtimedefrun_time(func):"计算运行时长装饰器"defwrapper(*args,**kwargs):#包装函数start=time.time()#在调用装饰函数前干点事情res=func(*args,**kwargs)end=time.time()#在调用装饰函数后干点事情t=e......
  • Microservice- Resiliency patterns: Timeout Pattern
    TimeoutPatternWhatiscontext.Context?The contextinGoenablesyoutospecifydeadlines,cancellationsignals,orkey-valuepairs availablebetweenprocesses. context.WithDeadlinerequiresatargetdateasaparameter,butthereisaneasierstep: c......
  • python装饰器
    装饰器概念:可以在不修改原来代码的情况下(函数原有的功能或者类原有的功能),为需要被装饰的函数或者类增加新的功能或者添加限制调剂以及帮助输出常用种类函数的装饰器类的装饰器不管是哪种类型的装饰器设计模式原则是:开放封闭的原则(对外扩展开发,对内关闭修改)1.1装饰器的定......
  • php nginx 出现504 Gateway Timeout
    先试试:ini_set('memory_limit','4096M');set_time_limit(0);情况一:由于nginx默认的fastcgi进程响应缓冲区太小造成这种情况下导致fastcgi进程被挂起,如果fastcgi服务队这个挂起处理不是很好的话,就可能提示“504GatewayTime-out”错误。情况一解决办法:默认的fastcgi进程响......
  • setTimeout可以将字符串当成代码执行,类比eval函数。当遇到setTimeout或者SetInterval,
    请问以下JS代码的输出顺序是?letdate=newDate()setTimeout(()=>{console.log('1')},2000)setTimeout('console.log(2)',1000);setTimeout(function(){console.log('3')},1500);while((newDate()-date)<3000){}A报错B......
  • setTimeout 是浏览器环境提供的,JS 标准没有规定。不是JavaScript的全局函数,是浏览器(宿
    下列哪些函数是JavaScript的全局函数?AencodeURIBparseFloatCsetTimeoutDeval正确答案:ABD答案:A、B、D个人记忆方法:6(编码相关)+2(数据处理)+4(数字相关)+1(特殊)编码相关:escape()、unescape()、encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent......
  • Flask之登录认证装饰器、配置文件、路由系统、CBV
    登录认证装饰器fromflaskimportFlask,request,render_template,redirect,session,jsonify,url_forapp=Flask(__name__)#如果要用session,必须加这一句app.secret_key='asdfasdfasdf-lqz-justin'USERS={1:{'name':'李清照','age......
  • 装饰器复习加补充
    装饰器给现有模块增添新的小功能,不改变原有的代码和调用方式的情况下,增加新的功能开放封闭原则:1、对扩展开放,在有新的需求和变划时,可以对现有的代码进行扩展2、对修改封闭,类设计完成后,就可以独立其工作,不要对类尽做修改if__name__=='__main__':的作用一个python文......
  • python中可变参数与装饰器的例子
    python的可变参数方法定义#*args是可以传list类型的可变参数,**kwargs是可以传dict的可变参数defwrapper(*args,**kwargs):使用示例deffoo(*args,**kwargs):print'args=',argsprint'kwargs=',kwargsprint'-------------------------------------......
  • hci0 command 0xfc20 tx timeout(Realtek 8761B Chipset, Bluetooth 5.0)
    当前使用的Linux内核版本: 4.4.189插上USBBluetooth5.0Adapter后,dmesg显示如下log:[240.348480]usb3-1.2:newfull-speedUSBdevicenumber6usingehci-platform[240.437834]usb3-1.2:NewUSBdevicefound,idVendor=0bda,idProduct=8771[240.438541]us......