python函數執行超時處理的兩種方法


 

背景

最近寫了自動化需要下載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:推薦使用第一種


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM