Azure存储Blob(v12)Python API:获取租约时重试

2024-09-28 22:19:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为Azure存储v12.x(doc)使用Python API。我正在尝试使用以下代码获取blob的租约:

credentials = ...
blob_client = BlobClient(account_url=ACCOUNT_URL, container_name=CONTAINER_NAME, blob_name=BLOB_NAME, credential=credentials)
lease_id_str = str(uuid.uuid4())
lease = blob_client.acquire_lease(lease_duration=60, lease_id=lease_id_str)

现在,如果租约不可用,我想重试。问题是“我应该如何通过重试获得租约?”

以下是我尝试过的几件事:

1.This documentation谈论属性retry_connectretry_readretry_status。将这些作为附加参数添加到上述代码中没有帮助

2.在this test case之后,我尝试了以下做法:

from azure.storage.blob import ExponentialRetry

retry = ExponentialRetry(initial_backoff=1, increment_base=3, retry_total=3)
lease = BlobLeaseClient(blob_client, lease_id=lease_id_str, retry_policy=retry)

它返回了以下信息:

TypeError: init() got an unexpected keyword argument 'retry_policy'


Tags: 代码nameclientidpolicyazureblobcredentials
1条回答
网友
1楼 · 发布于 2024-09-28 22:19:57

我相信出现此错误的原因是您试图将不受支持的retry_policy参数传递给BlobLeaseClient

如果查看您共享的测试用例链接代码,则会将重试策略传递给BlobServiceClient对象。你能试试吗?比如:

retry = ExponentialRetry(initial_backoff=1, increment_base=3, retry_total=3)
blob_service_client = BlobServiceClient(account_url=ACCOUNT_URL, credential=credentials, retry_policy=retry)
blob_client = blob_service_client.get_blob_client(container=CONTAINER_NAME, blob=BLOB_NAME)
lease = BlobLeaseClient(blob_client, lease_id=lease_id_str)

或者试试下面的方法。这里,在创建BlobClient的实例时传递重试策略

credentials = ...
retry = ExponentialRetry(initial_backoff=1, increment_base=3, retry_total=3)
blob_client = BlobClient(account_url=ACCOUNT_URL, container_name=CONTAINER_NAME, blob_name=BLOB_NAME, credential=credentials, retry_policy=retry)
lease = BlobLeaseClient(blob_client, lease_id=lease_id_str)

相关问题 更多 >