有时我们在写代码是,利用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关注