You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python程序打印大型Blob容器Blob名称时崩溃问题咨询

问题根因

你当前的代码在百万级Blob的容器上崩溃,核心是两个问题:

  • 未显式配置list_blobs()的分页参数,SDK默认分页策略在超大规模容器场景下,容易出现单次响应数据过大、迭代过程中缓存元数据堆积占满内存的问题
  • 无节流的连续请求+高速终端打印,会同时触发服务端请求限流、终端输出缓冲区溢出,进一步加剧崩溃概率
可直接落地的修复方案

利用Azure Blob SDK原生的分页迭代能力,控制单次拉取的数据量,搭配轻量节流,就能把内存占用稳定控制在极低水平,哪怕是千万级条目规模的容器也能稳定运行,不需要一次性加载全量数据。

实现代码

import time

# 按你的实际需求调整两个配置参数
RESULTS_PER_PAGE = 2000  # 单页拉取的Blob数量,建议范围500-5000,内存紧张就调小
BATCH_SLEEP_SEC = 0.2    # 每处理完一批的休眠间隔,单位秒,0.1-0.5即可,不需要太长

processed_count = 0
# 按页迭代Blob列表,永远不会把全量110万条数据加载到内存
for page in container_client.list_blobs(results_per_page=RESULTS_PER_PAGE).by_page():
    for blob in page:
        print(f"Container: {container_client.container_name}, Blob: {blob.name}")
        processed_count += 1
    # 每批处理完打印进度,短暂休眠释放请求和IO压力
    print(f"[进度] 已累计处理 {processed_count} 个Blob")
    time.sleep(BATCH_SLEEP_SEC)

优化建议

  • 如果运行时还是出现内存占用过高,直接把RESULTS_PER_PAGE调到500,BATCH_SLEEP_SEC调到0.5即可,稳定性会进一步提升
  • 不要做把所有Blob名称先存入列表再统一输出的操作,百万级字符串会占用数GB内存,必须边遍历边处理
  • 如果只是需要留存Blob名称列表,不需要实时看终端输出,可以在运行脚本时把输出重定向到文件,能彻底避免终端缓冲区溢出问题,执行命令参考:python your_script.py > blob_name_list.txt

内容的提问来源于stack exchange,提问作者pkd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 16:48:25