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

Python读取文本文件内容添加到字典时出现内存泄漏问题求助

内存泄漏原因
  1. NumPy切片视图隐式持有原始数组引用:你代码中array = output[:,1]生成的是原始output数组的切片视图,而非独立副本。视图会一直持有整个原始output数组的引用,哪怕你主动删除output变量,只要array还存储在字典中,完整的output数组内存就无法被释放。你统计的字典大小仅计算了视图本身的容量,未计入其引用的完整原始数组内存,所以会出现字典涨幅远低于系统内存涨幅的情况,这是最核心的泄漏原因。
  2. NumPy内存池延迟释放:NumPy使用独立的内存池管理内存分配,即便Python层面的数组对象已经被垃圾回收,对应的内存会先被放回NumPy内存池复用,不会立刻归还给操作系统,因此htop统计的进程常驻内存会持续上涨,不会实时下降。
解决方法
  • 切片时强制生成独立副本:将切片行修改为array = output[:,1].copy(),直接切断视图和原始output数组的引用关系,删除output后其占用的内存就可以被正常回收。
  • 直接读取目标列,避免加载全量文件内容:不用先读取整个txt文件再切片,直接指定np.loadtxt的usecols参数只读第二列,从源头减少不必要的内存占用:
    array = np.loadtxt(filename, usecols=1)
    
    也可以替换为性能更高的pandas.read_csv指定usecols参数读取,内存开销会更低。
  • 关闭NumPy内存池(可选):如果确认是内存池延迟释放导致的占用虚高,可以在脚本开头设置环境变量关闭NumPy内存池,让释放的内存直接归还操作系统:
    import os
    os.environ['NUMPY_MALLOC_MAX_ALIGN'] = '0'
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:54:03