装饰器函数监控任务的超时响应,让任务稳定运行

有时我们在写代码是,利用python的请求库请求数据时,会有响应超时或者响应持续没反应的状态,对于这种状态需要进行监控,比如定时监控,超过设置的时间了,就返回默认数据,进行标识。

这次用线程类和全局变量的方式,进行超时响应,下面对这两个方法进行举例:

一、线程类

定义线程函数

线程类函数,相当于多线程的方式,多线程是不能返回值的,而线程类可以获取返回值,所以有线程需求的任务,可以用线程类的方式。

装饰器函数

装饰器部分设置子线程的方法。子线程随着主线程的退出而退出,所以主线程超时了,就会触发子线程的运行。

在测试函数的时候,就可以设置超时时间和函数运行时间,进行测试。返回结果就是出现了设置好的‘请求超时’

二、全局变量法

由于多线程是不能获取返回值,那么可以定义一个全局变量,有返回值的时候,将返回值赋值给全局变量,通过全局变量获取返回值。

import time
from threading import Thread
a = None
def limit_decor(limit_time):

    def functions(func):
        # 执行操作
        def run(*params):
            thre_func = Thread(target=func, args=params)
            # 主线程结束(超出时长),则线程方法结束
            thre_func.setDaemon(True)
            thre_func.start()
          
            time.sleep(limit_time)
            # 最终返回值(不论线程是否已结束)
            if a:
                return a
            else:
                return '请求超时'
        return run

    return functions

@limit_decor(2)
def run():
    global a
    print(111)
    time.sleep(1)
    a = 2222
    return a

if __name__ == '__main__':

    print(run())

全局变量的方式,整体方式和线程类的方式一样。核心都是对任务的超时状态作出回应,如果有任务需要用到超时响应,不妨可以用上面的两种方法进行测试。

vx关注

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值