2

我的Python從Google TaskQueue REST API每秒的無限循環的過程租賃的任務:谷歌任務隊列REST拉回到500偶爾

credentials = GoogleCredentials.get_application_default() 
task_api = googleapiclient.discovery.build('taskqueue', 'v1beta2', credentials=credentials) 
while True: 
    tasks = task_api.tasks().lease(...).execute() 
    time.sleep(1) 

的過程中,有時幾個小時運行良好。

  • 500後端錯誤
  • 503後端錯誤

的過程在谷歌計算運行後臺發生內部錯誤:但偶爾通過HTTP錯誤的一個經常死機引擎服務器。它使用由GOOGLE_APPLICATION_CREDENTIALS env變量指定的服務帳戶密鑰。這是谷歌任務隊列錯誤還是我錯過了什麼?例如。我是否需要在每次租賃請求之前重新閱讀憑證?

+1

後端錯誤是洪水保護谷歌建議您實施指數退避。 – DaImTo

+0

@DalmTo你可以發佈一些鏈接到一些文檔? – xmedeko

+1

你們兩個都有Google搜索的力量。谷歌錯誤是系統範圍的所有API的好處https://developers.google.com/drive/v3/web/handle-errors#500_backend_error – DaImTo

回答

2

由於@DalmTo剛剛在評論中回答,我總結了他的答案並添加了Python解決方案。

Google 5xx支持的錯誤是防洪措施,Google建議實施exponential backoff。儘管鏈接指向Google Drive API,但所有API(包括GAE)的Google錯誤都是系統範圍的。它很少需要6次以上的重試來啓動和響應。

挖googleapiclient源之後,我發現,指數退避在這個庫中已經實現,因此該解決方案是死的簡單:

tasks = task_api.tasks().lease(...).execute(num_retries=6) 

http.py::_should_retry_response()節目來源,是旁邊HTTP 5XX當JSON響應包含userRateLimitExceededrateLimitExceeded錯誤時,請求也會重複出現錯誤。

相關問題