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

如何高效处理300MB级Python数据导出以避免OOM问题?

大体积JSON逐行导出的内存溢出解决方案

问题背景

现有样本数据:

{'test1': True, 'test2': [0, 1, 2], 'test3': None}

需要生成约300MB的JSON Lines格式(逐行存储单条JSON)文件。原方案将全量数据加载到内存(赋值给变量a)后遍历写入,直接触发OOM(内存溢出),即使配置8GB交换空间也无法解决。

核心问题

原方案将所有数据一次性加载到内存中,Python的列表和字典对象会产生额外内存开销,导致内存占用远超文件实际大小。解决思路是避免全量加载,采用流式生成/写入的方式。

具体解决方案

方案1:动态生成重复样本(适用于靠样本复制生成大文件的场景)

直接循环生成单条样本并逐行写入,全程仅在内存中保留单条样本数据:

import json

# 定义单条样本
sample = {'test1': True, 'test2': [0, 1, 2], 'test3': None}
# 预序列化样本,避免重复调用json.dumps提升效率
pre_serialized = json.dumps(sample) + '\n'
# 计算需要生成的行数(按单条约100字节估算,300MB≈300万行,可根据实际序列化后大小调整)
total_lines = 3 * 10**6

with open('json-dump', 'w') as f:
    for _ in range(total_lines):
        f.write(pre_serialized)

方案2:流式解析源数据(适用于数据来自外部大文件的场景)

如果数据存储在大JSON数组文件中,使用ijson库流式解析,避免加载整个文件到内存:

  1. 先安装依赖:pip install ijson
  2. 流式处理代码:
import json
import ijson

# 打开源文件和目标文件,流式读取+写入
with open('large-source.json', 'r') as src_file, open('json-dump', 'w') as dst_file:
    # 遍历源JSON数组中的每一项
    for item in ijson.items(src_file, 'item'):
        json.dump(item, dst_file)
        dst_file.write('\n')

额外优化

  • 使用json.dump替代json.dumps直接写入文件,减少中间字符串的内存占用;
  • 预序列化重复样本可大幅提升写入效率,避免重复序列化的CPU开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 10:17:16