flyaway
V2EX  ›  问与答

Python文件读取疑惑

  •  
  •   flyaway · Nov 6, 2013 · 4522 views
    This topic created in 4745 days ago, the information mentioned may be changed or developed.
    我正在用python处理一个比较大的数据文件,因为这些数据是用来训练模型的,由于模型的限制,必须一次性把数据读入内中,不能使用生成器。数据文件有634M,但是我发现读取文件的过程中,内存开销非常大,还没有完全读完数据,内存使用已经超过3G,我非常好奇这是什么原因导致的?是不是python底层实现的问题?

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