V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
flyaway
V2EX  ›  问与答

Python文件读取疑惑

  •  
  •   flyaway · 2013-11-06 09:03:21 +08:00 · 3568 次点击
    这是一个创建于 4037 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我正在用python处理一个比较大的数据文件,因为这些数据是用来训练模型的,由于模型的限制,必须一次性把数据读入内中,不能使用生成器。数据文件有634M,但是我发现读取文件的过程中,内存开销非常大,还没有完全读完数据,内存使用已经超过3G,我非常好奇这是什么原因导致的?是不是python底层实现的问题?

    详细情况:
    OS: windows 7 64位
    python: 3.3.2
    操作: 仅仅是读数据,然后把读入的数据转成数字型,读取过程是按行处理的。
    第 1 条附言  ·  2013-11-06 13:19:35 +08:00
    刚才试了一下,不做任何类型转换,单纯的读数据,放到列表中,内存消耗大概1.2G,但是对每一行做split()操作之后,一瞬间就飙到到2G以上,而且还在不断增加。看来是对数据的操作过程带来了大量的内存消耗……
    11 条回复    1970-01-01 08:00:00 +08:00
    cloudzhou
        1
    cloudzhou  
       2013-11-06 10:22:15 +08:00
    这种情况不一定是python读取文件的问题,你可以先实现一个python脚本,只读取到内存,什么都不做,看看需要占用多少内存
    yuelang85
        2
    yuelang85  
       2013-11-06 10:29:25 +08:00
    应该是把数据转换成python对象造成的开销吧
    flyaway
        3
    flyaway  
    OP
       2013-11-06 10:46:59 +08:00 via iPhone
    机子内存只有4g,有没有什么解决方案呢?
    yelite
        4
    yelite  
       2013-11-06 10:50:06 +08:00
    @flyaway 在需要使用的时候再转换类型?
    flyaway
        5
    flyaway  
    OP
       2013-11-06 10:55:38 +08:00 via iPhone
    把读取过程做成生成器,然后在生成器之上对每条数据进行类型转换,这样会不会减少内存消耗呢?我现在在上课,只能暂时和大家纸上谈兵了…
    yuelang85
        6
    yuelang85  
       2013-11-06 11:07:10 +08:00   ❤️ 1
    @flyaway 如果你之前转的数据不消灭,这样内存还是会一点一点变大。。。。
    sethverlo
        7
    sethverlo  
       2013-11-06 11:07:45 +08:00   ❤️ 1
    我记得好像「python range xrange」这个关键词可以帮到楼主。
    flyaway
        8
    flyaway  
    OP
       2013-11-06 11:13:22 +08:00 via iPhone
    可是现在的模型算法需要把训练数据整体传过去,内存消耗不可避免,可是我不明白的是,为什么600多m的数据在内存中成为python对象之后会占用如此之多的内存
    lookhi
        9
    lookhi  
       2013-11-06 11:22:02 +08:00
    又想马儿跑的快,又想马儿不吃草。
    难啊
    chlx
        10
    chlx  
       2013-11-06 11:42:22 +08:00 via Android
    我也遇到类似的问题,是用ndarray的两个矩阵拼接时内存开销很大,数据量大时机器吃不消
    dreampuf
        11
    dreampuf  
       2013-11-06 12:53:37 +08:00
    反序列化带来的开销
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5182 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 01:24 · PVG 09:24 · LAX 17:24 · JFK 20:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.