电竞比分网-中国电竞赛事及体育赛事平台

分享

tenacity,建議直接封神!

 Python集中營 2025-10-10 發(fā)布于甘肅

在日常的代碼開發(fā)過程中,重試邏輯往往扮演著比較重要的角色。

特別是在業(yè)務超時、請求阻塞等業(yè)務場景需要對某一塊邏輯加上重試機制以保持業(yè)務的連貫性。

在我們的Python編碼中就有這樣一個非常便捷的工具庫;它可以幫助我們很簡單的就能實現(xiàn)一個代碼塊中重試機制。

你可以選擇pip或者conda命令安裝這個工具庫,它就是 Tenacity 模塊。

pip install tenacity

下面我們通過一個簡單的代碼塊來演示一下它的用法。

在安裝完成之后可以直接使用注解的方式,將 @retry注解直接添加在某個函數(shù)的前面;

可以在注解中通過參數(shù)設置的方式直接設置業(yè)務邏輯重試的次數(shù)、重試間隔時間等相關信息,自動幫助我們完成重試機制;

from tenacity import retry, stop_after_attempt, wait_exponential, retry_if_exception_type
import requests  # 用網(wǎng)絡請求模擬易失敗操作

# 1. 給函數(shù)加裝飾器,定義重試規(guī)則
@retry(
    stop=stop_after_attempt(3),  # 最多重試3次
    wait=wait_exponential(multiplier=1, min=1, max=5),  # 重試間隔:1s → 2s → 4s(最多5s)
    retry=retry_if_exception_type(requests.exceptions.RequestException)  # 只有請求異常時才重試
)

deffetch_url(url):
    response = requests.get(url, timeout=3)
    response.raise_for_status()# 觸發(fā)4xx/5xx錯誤的異常
return response.text

# 2. 調(diào)用函數(shù)(失敗會自動重試)
try:
    result = fetch_url("https:///nonexistent")# 故意訪問不存在的地址
print("請求成功:", result[:50])
exceptExceptionas e:
print(f"3次重試后仍失?。?/span>{e}")

最后在調(diào)用這個添加了重試機制的函數(shù)時就會觸發(fā)重試機制,這種方式避免我們對每一個函數(shù)去開發(fā)復雜的重試機制。

tenacity 模塊更多的說明及用途,歡迎大家在留言討論!

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多