程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python 強大的錯誤重試庫 tenacity retry

編輯:Python

文章目錄

  • 適用場景
  • 功能使用說明
    • 設置最大重試次數
    • 設置重試最大超時時長
    • 組合重試條件
    • 設置相鄰兩次重試的時間間隔
    • 自定義是否觸發重試
  • 代碼

適用場景

  • web接口測試
  • 爬蟲

功能使用說明

tenacity的錯誤重試核心功能是由其retry裝飾器來實現的
默認retry不給參數時,將會不停地重試下去, 這也不符合需求的.

設置最大重試次數

retry(stop=stop_after_attempt(3)) 將在嘗試3次後,於第4次拋出異常.

設置重試最大超時時長

retry(stop=stop_after_delay(5)),整個重試的超時時長超於5秒, 將停止重試.

組合重試條件

retry(stop=(stop_after_delay(5) | stop_after_attempt(3)))

將在重試總時長超過5秒後, 或者 重試3次後, 停止重試

設置相鄰兩次重試的時間間隔

有兩種方式:

  1. 設置固定的時間間隔
retry(wait=wait_fixed(1), stop=stop_after_attempt(3))

重試3次, 每次重試間隔1秒

  1. 設置隨機的時間間隔
retry(wait=wait_random(min=1, max=3), stop=stop_after_attempt(3))

重試3次, 每次重試間隔1到3秒

自定義是否觸發重試

  1. 捕捉或忽略特定的錯誤類型
# 捕捉錯誤類型
retry(retry=retry_if_exception_type(FileExistsError))
# 忽略錯誤類型
retry(retry=retry_if_not_exception_type(FileNotFoundError))

若是FileExistsError,則重試
若是FileNotFoundError,則不用重試.

  1. 自定義函數結果,使用條件判斷函數
retry(retry=retry_if_result(lambda x: x>1))

若函數體的返回結果大於1, 則重試

  1. 對函數的錯誤重試情況進行統計
print(fun_name.retry.statistics)

可以打印fun_name的重試統計情況

代碼

from tenacity import retry, stop_after_attempt, stop_after_delay
import random
# 設置重試次數
@retry(stop=stop_after_attempt(3))
def fun_name1():
print("函數體內執行")
raise Exception
# 設置重試總超時時長
import time
@retry(stop=stop_after_delay(2))
def fun_name2():
print("函數體內執行")
time.sleep(1)
print(time.time())
raise Exception
# 組合重試停止條件
@retry(stop=(stop_after_delay(3) | stop_after_attempt(10) ))
def fun_name3():
print("函數體內執行")
time.sleep(random.random())
print(time.time())
raise Exception
# 設置相鄰重試間隔為固定時間間隔
from tenacity import wait_fixed, wait_random
@retry(wait=wait_fixed(1), stop=stop_after_delay(5))
def fun_name4():
print("函數體內執行")
print(time.time())
raise Exception
# 設置相鄰重試間隔 隨機時間間隔
@retry(wait=wait_random(min=1,max=3), stop=stop_after_delay(5))
def fun_name5():
print("函數體內執行")
print(time.time())
raise Exception
fun_name5()
fun_name4()
fun_name3()
fun_name2()

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved