当前位置 : 主页 > 编程语言 > python >

python函数执行超时处理的两种方法

来源:互联网 收集:自由互联 发布时间:2022-06-21
背景 最近写了自动化需要下载apk,但有时候部分包下载很慢,影响整体测试时间,所有需要设定下载超时自动退出。 方法一: 通过func_timeout模块的@func_set_timeout()来实现 步骤: 1.安装

背景

最近写了自动化需要下载apk,但有时候部分包下载很慢,影响整体测试时间,所有需要设定下载超时自动退出。

方法一:

通过func_timeout模块的@func_set_timeout()来实现

步骤:

1.安装 pip install func_timeout

2.不多说了直接上代码

#_________________________________方式1:通过func_timeout装饰器来解决函数执行超时______________________________________________
from func_timeout import func_set_timeout
import func_timeout
@func_set_timeout(3)#设定函数超执行时间_
def task():
print('hello world')
time.sleep(5)
return '执行成功_未超时'

if __name__ == '__main__':
try:
print(task())
#若调用函数超时自动走异常(可在异常中写超时逻辑处理)
except func_timeout.exceptions.FunctionTimedOut:
print('执行函数超时')

 

方法二:

通过eventlet模块来实现

步骤:

1.安装 pip install eventlet

import eventlet#导入eventlet这个模块
###########普通方式###########################
eventlet.monkey_patch()#必须加这条代码
with eventlet.Timeout(5,False):#设置超时时间为5秒
time.sleep(4)
print('没有跳过这条输出')
print('跳过了输出')

###########函数方式#######################
def timeou(name,_time):
eventlet.monkey_patch()#必须加这条代码
with eventlet.Timeout(_time,False):#设置超时间
if isinstance(name,str):
print('name为字符串类型_值是{}'.format(name))
return 'str'
else:
print('name类型为:{}'.format(eval(str(type(name)).split()[1][:-1])))
return eval(str(type(name)).split()[1][:-1])
print('不好意思函数调用超时')

if __name__ == '__main__':
print(timeou('你好靓女!',3))

 

网友评论