Python Google任务队列REST拉返回500

Python Google任务队列REST拉返回500,python,google-app-engine,google-compute-engine,task-queue,Python,Google App Engine,Google Compute Engine,Task Queue,在无限循环中,我有一个Python进程,它每秒钟都在租赁任务: credentials = GoogleCredentials.get_application_default() task_api = googleapiclient.discovery.build('taskqueue', 'v1beta2', credentials=credentials) while True: tasks = task_api.tasks().lease(...).execute() ti

在无限循环中,我有一个Python进程,它每秒钟都在租赁任务:

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)
这一过程有时会持续好几个小时。但偶尔会因以下HTTP错误之一而崩溃:

  • 500后端错误
  • 503后端错误
  • 500后端发生内部错误

该进程正在Google计算引擎服务器上运行。它使用由GOOGLE_APPLICATION_CREDENTIALS env变量指定的服务帐户密钥。这是谷歌任务队列错误还是我遗漏了什么?例如,我是否需要在每次租赁请求之前重新阅读凭据?

由于@DalmTo刚刚在评论中回答了问题,我总结了他的答案并添加了Python解决方案

谷歌5xx支持的错误是洪水保护,谷歌建议实施。尽管有指向GoogleDrive API的链接点,但所有API(包括GAE)的Google错误都是系统范围的。它很少需要超过6次的重试来启动和响应

在挖掘GoogleAppClient源代码后,我发现该库中已经实现了指数退避,因此解决方案非常简单:

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

http.py::\u应该重试\u响应()
的源显示,除了HTTP 5xx错误之外,当JSON响应包含
UserRateLimitExceed
RateLimitExceed
错误时,请求也会重复。

后端错误是洪水防护,谷歌建议你实施指数退避。@DalmTo你能发布一些文档的链接吗?你们两个都有谷歌搜索的能力。谷歌错误是系统范围的,适用于所有API嗯,是关于谷歌驱动器的,我不知道它也适用于谷歌应用程序引擎。正如我所说的“谷歌错误是系统范围的,适用于所有API”400和500个错误是谷歌系统的标准错误,但奇怪的400个错误可能是特定于API的。是的,它适用于app engine 500错误。500个错误是服务器告诉您将要快速运行或服务器出现故障的一种方式。请稍等片刻,然后重试。它很少需要超过6次的重试来启动和响应。