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

向大体积CSV文件追加数据时内存占用持续升高问题如何解决

内存上涨原因排查
  • 最核心的诱因和CSV文件本身的历史大小无关:你的代码以追加模式a打开文件,不会加载30万行历史内容到内存。内存持续上涨大概率是全局列表my_data、my_list没有及时清空导致,每次追加数据时你都往这两个列表里新增元素,历史数据一直驻留内存没有释放。
  • 你给同步方法writer.writerow加了await修饰,说明你使用的是第三方异步CSV操作库,部分异步库会默认开启写缓存,缓存数据积累过多也会导致内存占用上涨。
  • 标准库csv.DictWriter本身仅会持有字段名的引用,不会产生额外的冗余内存占用,这部分逻辑不需要调整。
修复方案
  1. 每次写入完成后立刻清空两个数据列表,释放历史数据占用的内存,同时补充CSV写入的标准参数避免乱码、空行问题:
with open('mydata.csv', 'a', newline='', encoding='utf-8') as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=cols)
    for package, li in zip(my_data, my_list):
        row_data = {}
        data_to_append_to_row = li.get_text()
        # 用字典get方法替代异常捕获,逻辑更简洁性能更高
        row_data['description'] = package.get('description', '')
        row_data["core_id"] = data_to_append_to_row
        writer.writerow(row_data)
    # 手动刷盘确保数据写入磁盘,避免缓存堆积
    csvfile.flush()

# 写入完成后清空数据列表,释放内存
my_data.clear()
my_list.clear()
  1. 如果你确实在使用异步CSV库,写入完成后调用对应异步刷盘方法,同时调整库的缓存配置,避免大量数据堆在内存中没有写入磁盘。
  2. 性能优化可选:如果不需要DictWriter的字段校验能力,可以换成csv.writer降低额外开销,写入速度更快,内存占用更低。
  3. 单日追加行数超过1万行时可以分批写入,每写1000行就触发一次刷盘,避免缓存堆积。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:18:05