Google cloud storage 在python客户端中批量删除对象的指数回退

Google cloud storage 在python客户端中批量删除对象的指数回退,google-cloud-storage,Google Cloud Storage,我的请求看起来像 错误是: [2018-09-12 21:28:41,726] {base_task_runner.py:98} INFO - Subtask: File "/usr/local/lib/python2.7/site-packages/google/cloud/storage/batch.py", line 243, in _finish_futures [2018-09-12 21:28:41,731] {base_task_runner.py:98} INFO - Sub

我的请求看起来像

错误是:

[2018-09-12 21:28:41,726] {base_task_runner.py:98} INFO - Subtask:   File "/usr/local/lib/python2.7/site-packages/google/cloud/storage/batch.py", line 243, in _finish_futures
[2018-09-12 21:28:41,731] {base_task_runner.py:98} INFO - Subtask:     raise exceptions.from_http_response(exception_args)
[2018-09-12 21:28:41,731] {base_task_runner.py:98} INFO - Subtask: google.api_core.exceptions.InternalServerError: 500 BATCH contentid://None: Backend Error

如何将截断指数回退添加到我的代码中?

批处理代码不包括重试本身,也不允许您准确地找出其中哪些请求失败。这意味着(a)您必须自己重试,(b)您必须重试整个批次

(a) 可以通过使用该软件包来简化。(b) 这不是问题,因为删除blob是幂等的

综合起来,解决方案可能如下所示:

def可重试_异常(e):
返回isinstance(e,GoogleAPICallError)和(e.code==429或e.code>=500)
@重试(在异常上重试=可重试异常,
停止最大尝试次数=7,
等待指数乘数=1000,
等待(最大值=10000)
def删除_批次(c):
使用存储\u client.batch():
对于c中的blob:
blob.delete()
blob_to_delete=[blob for blob in bucket.list_blob(prefix=“my/prefix/here”)]
对于块中的c(块,批量大小=100):
删除批次(c)

谷歌云拥有
@Retry
装饰器本身,另请参见,重试是一种放弃,最好使用韧性,请参见@David google应该更新他们的。
[2018-09-12 21:28:41,726] {base_task_runner.py:98} INFO - Subtask:   File "/usr/local/lib/python2.7/site-packages/google/cloud/storage/batch.py", line 243, in _finish_futures
[2018-09-12 21:28:41,731] {base_task_runner.py:98} INFO - Subtask:     raise exceptions.from_http_response(exception_args)
[2018-09-12 21:28:41,731] {base_task_runner.py:98} INFO - Subtask: google.api_core.exceptions.InternalServerError: 500 BATCH contentid://None: Backend Error