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

如何从Azure Storage直接下载大Blob到本地文件避免内存占用过高

Azure Storage 大体积 Blob 低内存下载方案

官方入门示例使用readall()的实现确实仅适用于小文件场景,下载数百GB级大文件时会直接占满内存。Azure Blob Storage Python v12+ 版本SDK本身已经内置了流式分块下载能力,不需要手动实现复杂的分块逻辑,内存中仅会缓存当前下载的块内容,不会加载全量文件。

实现代码

import os
from azure.storage.blob import BlobServiceClient

# 替换为实际配置信息
storage_connection_str = "你的存储账号连接字符串"
target_container_name = "目标容器名"
target_blob_name = "要下载的大Blob名称"
local_save_path = "本地文件保存路径"

# 初始化Blob客户端
blob_service_client = BlobServiceClient.from_connection_string(storage_connection_str)
blob_client = blob_service_client.get_blob_client(
    container=target_container_name,
    blob=target_blob_name
)

print(f"开始下载Blob到: {local_save_path}")
with open(local_save_path, "wb") as local_f:
    # 初始化下载流,可通过max_concurrency调整并行下载块数提升速度
    downloader = blob_client.download_blob(max_concurrency=4)
    # 自动分块写入本地文件,内存常驻仅为单块大小(默认4MB/块)
    downloader.readinto(local_f)

可选自定义配置

如果需要手动调整块大小、自定义下载逻辑,也可以直接迭代下载流的块内容:

# 自定义单块大小为8MB
chunk_size = 8 * 1024 * 1024
with open(local_save_path, "wb") as local_f:
    downloader = blob_client.download_blob(max_concurrency=4)
    for chunk in downloader.chunks(chunk_size=chunk_size):
        local_f.write(chunk)

注意事项

  • 请使用12.x及以上版本的azure-storage-blob包,旧的v2版本SDK接口不兼容且已停止维护,升级命令为pip install --upgrade azure-storage-blob
  • 峰值内存占用 = 单块大小 * 并发数,例:8MB块大小+8并发的配置下,峰值内存占用仅为64MB,完全适配TB级大文件下载场景
  • SDK内置了网络异常重试、块校验逻辑,不需要额外处理常规网络波动问题;如果需要断点续传,可以记录已下载的字节偏移量,调用download_blob()时传入offset参数即可从断点位置继续下载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:39:18