|
在日常的代碼開發(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 模塊更多的說明及用途,歡迎大家在留言討論!
|