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

使用Python从Swift下载1.2G文件遇MemoryError,求代码优化方案

解决Swift大文件下载内存溢出问题

你的问题根源是一次性将1.2G的ISO文件全部加载到内存中,conn.get_object()默认会把对象完整内容读取到内存,直接导致内存占用飙升并触发MemoryError。

修改方案是采用分块读取+流式写入,让程序每次只加载一小部分文件内容到内存,写完再读下一块,具体代码如下:

import swiftclient

# 建立Swift连接
conn = swiftclient.client.Connection(
    auth_version='1',
    user='admin:admin',
    key='admin9',
    authurl='http://172.16.101.79:6789/auth/v1.0'
)

container_name = 'storage2'
object_name = 'mu_visual_cpp_build_tools_2015_update_3_x86_dvd_779b35c8.iso'
save_path = 'D:\\100\\mu_visual_cpp_build_tools_2015_update_3_x86_dvd_779b35c8.iso'

# 指定分块大小(这里设为1MB,可根据需求调整,比如65536=64KB)
chunk_size = 1024 * 1024

# 获取分块迭代器,不会一次性加载全部内容
obj_iter = conn.get_object(container_name, object_name, resp_chunk_size=chunk_size)

# 逐块写入文件
with open(save_path, 'wb+') as f:
    for chunk in obj_iter[1]:
        f.write(chunk)

关键改动说明

  • 添加resp_chunk_size参数:告诉swiftclient每次返回指定大小的数据块,而非整个文件
  • 迭代分块内容:通过遍历obj_iter[1]获取每一块数据,逐块写入本地文件,内存仅保留当前块的内容,不会出现内存暴涨

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:00:58