Google Cloud 的 Python 函式庫專為提高彈性而設計。它們添加了強大的重試機制來有效處理瞬態錯誤。但是,在某些情況下,預設重試行為可能不適合。例如,您可能會遇到某些不應觸發重試的錯誤,或者您可能需要對重試邏輯進行更多控制。
這篇部落格文章探討了 Google Cloud 的 Python 函式庫如何與自訂重試謂詞交互,讓您可以自訂重試行為以更好地滿足您的特定要求。
在這篇文章中,我想重點介紹一個與在 Google Cloud 庫中使用服務帳號模擬相關的具體範例。在我設計並目前正在研究的架構中,我們將使用者環境隔離到單獨的 Google Cloud 專案中。我們注意到,我們的一些服務在某些用戶流中效能下降。經過調查,我們將問題追溯到前面提到的庫的預設重試行為。
預設重試機制
在進行自訂之前,了解 Google Cloud Python 程式庫的預設重試行為非常重要。這些函式庫通常具有指數退避策略,並增加重試抖動。這意味著,當發生暫時性錯誤時,庫將在短暫延遲後重試該操作,並且每次後續嘗試後延遲都會呈指數增長。包含抖動會帶來延遲的隨機性,這有助於防止多個客戶端之間的重試同步。
雖然此策略在許多情況下都很有效,但它可能不適合所有情況。例如,如果您使用服務帳戶模擬並遇到身份驗證錯誤,則嘗試重試該操作可能沒有幫助。在這種情況下,可能需要先解決底層身份驗證問題,然後才能重試成功。
輸入自訂重試謂詞
在 Google Cloud 庫中,自訂重試謂詞可讓您指定應進行重試嘗試的精確條件。您可以建立一個接受異常作為輸入的函數,如果應該重試操作則傳回 True,如果不應該重試則傳回 False。
例如,以下是自訂重試謂詞,可防止重試服務帳戶模擬期間發生的某些驗證錯誤:
from google.api_core.exceptions import GoogleAPICallError from google.api_core.retry import Retry, if_transient_error def custom_retry_predicate(exception: Exception) -> bool: if if_transient_error(exception): # exceptions which should be retried if isinstance(exception, GoogleAPICallError): if "Unable to acquire impersonated credentials" in exception.message: # look for specific impersonation error return False return True return False
此謂詞檢查異常是否為 GoogleAPICallError,並特別尋找訊息「無法取得類比憑證」。如果滿足此條件,則傳回 False,防止重試。
將自訂謂詞與 Google Cloud 庫結合使用
Firestore:
from google.api_core.exceptions import GoogleAPICallError from google.api_core.retry import Retry, if_transient_error def custom_retry_predicate(exception: Exception) -> bool: if if_transient_error(exception): # exceptions which should be retried if isinstance(exception, GoogleAPICallError): if "Unable to acquire impersonated credentials" in exception.message: # look for specific impersonation error return False return True return False
BigQuery:
from google.cloud import firestore # ... your Firestore setup ... retry = Retry(predicate=custom_retry_predicate, timeout=10) # example of an arbitrary firestore api call, works with all stream = collection.stream(retry=retry)
在這兩個範例中,我們使用自訂謂詞和逾時值來建立一個 Retry 物件。然後,此 Retry 物件作為參數傳遞給對應的 API 呼叫。
自訂重試謂詞的好處
- 細粒度控制:根據特定異常或錯誤訊息精確定義重試條件。
- 提高效率:避免對非暫時性錯誤進行不必要的重試,從而節省資源和時間。
- 增強應用程式穩定性:妥善處理特定錯誤以防止級聯故障。
結論
自訂重試謂詞提供了一種增強 Google Cloud 應用程式彈性的有效方法。透過自訂重試行為以滿足您的特定要求,您可以確保您的應用程式穩健、高效且可擴展。負責您的錯誤處理並掌握重試過程!
以上是自訂 Google Cloud Python 庫中的重試謂詞的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本教程演示如何使用Python處理Zipf定律這一統計概念,並展示Python在處理該定律時讀取和排序大型文本文件的效率。 您可能想知道Zipf分佈這個術語是什麼意思。要理解這個術語,我們首先需要定義Zipf定律。別擔心,我會盡量簡化說明。 Zipf定律 Zipf定律簡單來說就是:在一個大型自然語言語料庫中,最頻繁出現的詞的出現頻率大約是第二頻繁詞的兩倍,是第三頻繁詞的三倍,是第四頻繁詞的四倍,以此類推。 讓我們來看一個例子。如果您查看美國英語的Brown語料庫,您會注意到最頻繁出現的詞是“th

本文解釋瞭如何使用美麗的湯庫來解析html。 它詳細介紹了常見方法,例如find(),find_all(),select()和get_text(),以用於數據提取,處理不同的HTML結構和錯誤以及替代方案(SEL)

處理嘈雜的圖像是一個常見的問題,尤其是手機或低分辨率攝像頭照片。 本教程使用OpenCV探索Python中的圖像過濾技術來解決此問題。 圖像過濾:功能強大的工具圖像過濾器

Python是數據科學和處理的最愛,為高性能計算提供了豐富的生態系統。但是,Python中的並行編程提出了獨特的挑戰。本教程探討了這些挑戰,重點是全球解釋

本文比較了Tensorflow和Pytorch的深度學習。 它詳細介紹了所涉及的步驟:數據準備,模型構建,培訓,評估和部署。 框架之間的關鍵差異,特別是關於計算刻度的

本教程演示了在Python 3中創建自定義管道數據結構,利用類和操作員超載以增強功能。 管道的靈活性在於它能夠將一系列函數應用於數據集的能力,GE

Python 對象的序列化和反序列化是任何非平凡程序的關鍵方面。如果您將某些內容保存到 Python 文件中,如果您讀取配置文件,或者如果您響應 HTTP 請求,您都會進行對象序列化和反序列化。 從某種意義上說,序列化和反序列化是世界上最無聊的事情。誰會在乎所有這些格式和協議?您想持久化或流式傳輸一些 Python 對象,並在以後完整地取回它們。 這是一種在概念層面上看待世界的好方法。但是,在實際層面上,您選擇的序列化方案、格式或協議可能會決定程序運行的速度、安全性、維護狀態的自由度以及與其他系

Python的statistics模塊提供強大的數據統計分析功能,幫助我們快速理解數據整體特徵,例如生物統計學和商業分析等領域。無需逐個查看數據點,只需查看均值或方差等統計量,即可發現原始數據中可能被忽略的趨勢和特徵,並更輕鬆、有效地比較大型數據集。 本教程將介紹如何計算平均值和衡量數據集的離散程度。除非另有說明,本模塊中的所有函數都支持使用mean()函數計算平均值,而非簡單的求和平均。 也可使用浮點數。 import random import statistics from fracti


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

SublimeText3漢化版
中文版,非常好用

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中