Код пакета не включает в себя саму повторную попытку и не позволяет вам точно определить, какие запросы изнутри не были выполнены. Это означает, что (а) вы должны будете повторить попытку самостоятельно, и (б) вам придется повторить всю партию.
(a) можно упростить с помощью пакета retrying
. (б) не проблема, так как удаление капли идемпотентно.
В совокупности решение может выглядеть следующим образом:
def retriable_exception(e):
return isinstance(e, GoogleAPICallError) and (e.code == 429 or e.code>=500)
@retry(retry_on_exception=retriable_exception,
stop_max_attempt_number=7,
wait_exponential_multiplier=1000,
wait_exponential_max=10000)
def delete_batch(c):
with storage_client.batch():
for blob in c:
blob.delete()
blobs_to_delete = [blob for blob in bucket.list_blobs(prefix="my/prefix/here")]
for c in _chunk(blobs, batch_size=100):
delete_batch(c)