首页 > 技术文章 > python函数执行超时处理的两种方法

chen-xia 2020-08-07 11:35 原文

 

背景

最近写了自动化需要下载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))

 

Ps:推荐使用第一种

推荐阅读