retrying
是一個 Python 包,用於提供一個裝飾器(以及一個重試控制機制),允許你將其應用於任何函式或方法上,使得在遇到特定的異常或者返回條件不滿足時自動重試。使用 retrying
包中的 retry
函式可以幫助簡化程式碼中處理瞬時錯誤或不穩定操作(如網路請求)的邏輯。
當你使用 @retry
裝飾器裝飾一個函式時,可以指定多個引數來控制重試行為,包括:
stop_max_attempt_number
: 重試的最大次數。stop_max_delay
: 最大的重試延遲時間(毫秒),超過這個時間後不再重試。wait_fixed
: 兩次重試之間的固定等待時間(毫秒)。wait_random_min
和wait_random_max
: 兩次重試之間的隨機等待時間的最小值和最大值(毫秒)。retry_on_exception
: 一個函式,當它返回True
時,會在丟擲的異常上重試。retry_on_result
: 一個函式,當目標函式返回值使得該函式返回True
時進行重試。
例如,假設你有一個網路請求的函式,由於網路波動,你希望在遇到連線錯誤時自動重試,但最多重試3次,每次重試之間等待2秒:
from retrying import retry
import requests
@retry(stop_max_attempt_number=3, wait_fixed=2000)
def fetch_data(url):
response = requests.get(url)
response.raise_for_status() # 如果響應碼不是 200,會丟擲異常
return response.json()
# 使用這個函式,它會在失敗時嘗試最多3次,每次嘗試之間等待2秒
data = fetch_data("https://example.com/api/data")
在這個例子中,如果 requests.get(url)
因為網路問題丟擲異常(比如 requests.exceptions.ConnectionError
),fetch_data
函式會自動重試,直到嘗試了3次或者成功獲取資料為止。