重試/retrying/retry/重試控制機制

__username發表於2024-03-22

retrying 是一個 Python 包,用於提供一個裝飾器(以及一個重試控制機制),允許你將其應用於任何函式或方法上,使得在遇到特定的異常或者返回條件不滿足時自動重試。使用 retrying 包中的 retry 函式可以幫助簡化程式碼中處理瞬時錯誤或不穩定操作(如網路請求)的邏輯。

當你使用 @retry 裝飾器裝飾一個函式時,可以指定多個引數來控制重試行為,包括:

  • stop_max_attempt_number: 重試的最大次數。
  • stop_max_delay: 最大的重試延遲時間(毫秒),超過這個時間後不再重試。
  • wait_fixed: 兩次重試之間的固定等待時間(毫秒)。
  • wait_random_minwait_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次或者成功獲取資料為止。

相關文章