azure container_client delete_blobs导致oom

时间:2020-09-28 21:21:12

标签: python-3.x azure-storage-blobs

我正在使用Azure blob SDK python版本。这是删除Blob的方法:

blobs = container_client.list_blobs(name_starts_with="myprefix") 
container_client.delete_blobs(*blobs)

如果这里blobs返回了大量的Blob对象,则上述代码将崩溃。 这里的标准做法是什么?还有其他方法可以批量删除吗?

更新:

回复@Ivan Yang: 这与您的解决方案略有不同。我运行了,但是出错了

批处理操作部分失败。

blobs = container_client.list_blobs(name_starts_with="myprefix")
blobs_list = list(blobs)
i in range(0, len(blobs_list), 10):
    container_client.delete_blobs(*blobs_list[i: i+10])

1 个答案:

答案 0 :(得分:1)

最好使用delete_blobs方法指定要删除的Blob数。这样调试起来就更容易了。

作为一种解决方法,您可以每次获取一定数量(例如10个blob)的blob,然后删除直到continuation token为空。

这是示例代码:

#define a continuation token
continuation_token = None

while True:
    #fetch 10 blobs each time
    blob_list = container_client.list_blobs(name_starts_with="xxx",results_per_page=10).by_page(continuation_token=continuation_token)
    list_segment=[blob.name for blob in list(next(blob_list))]
    container_client.delete_blobs(*list_segment)
    
    continuation_token = blob_list.continuation_token

    if not continuation_token:
        break