首页 > 解决方案 > azure container_client delete_blob 导致 oom

问题描述

我正在使用 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])

标签: python-3.xazureazure-blob-storage

解决方案


您最好使用方法指定您尝试删除的 blob 数量delete_blobs。然后更容易调试。

作为一种解决方法,您可以每次获取一定数量(如 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

推荐阅读