python-3.x - 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])
解决方案
您最好使用方法指定您尝试删除的 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
推荐阅读
- javascript - 目录和子目录中的 node.js 文件搜索
- c++ - C++中DAG的拓扑排序;存储排序列表的数据结构?
- ruby - 在 Ruby 中生成序列
- python - 断点在调试器中的作用是什么
- pyspark - AWS EMR 从 S3 导入 pyfile
- pygame - 从组中更改精灵矩形的颜色
- angular - 在路由中导航会不断为每个 ngoninit 创建 observables
- python - 为什么不能一次运行多个 SparkContexts
- javascript - 提交表单未正确向 SQL(PHP 和 JS)提交信息
- javascript - 试图用变量欺骗输入/文本区域