【问题标题】:Python saving data inside Memory? (ram)Python在内存中保存数据? (内存)
【发布时间】:2016-01-21 01:05:07
【问题描述】:

我是 Python 新手,但我还不知道。 我在 for 循环中有一个基本程序,它从站点请求数据并将其保存到文本文件中 但是当我检查我的任务管理器时,我发现内存使用量只会增加?长时间运行时,这对我来说可能是个问题。 Python这样做是标准的还是你可以改变它? 这是程序的基本内容

savefile = open("file.txt", "r+")
for i in savefile:
     #My code goes here
     savefile.write(i)
#end of loop
savefile.close()

【问题讨论】:

    标签: python file memory save


    【解决方案1】:

    有一个更好的解决方案,以pythonic方式,对此:

    with open("your_file.txt", "write_mode") as file_variable_name:
        for line in file_name:
            file_name.write(line)
            file_name.flush()
    

    此代码为每一行刷新文件,并在执行后通过 with-Statement 关闭文件

    【讨论】:

      【解决方案2】:

      正如@Almog 所说,Python 不会立即写入文件。因此,您写入文件的每一行都会存储到 RAM 中,直到您使用 savefile.close(),它会刷新内部缓冲区并将所有内容写入文件。这可以解释额外的内存使用。

      尝试将循环更改为:

      savefile = open('file.txt', 'r+')
      for i in savefile:
          savefile.write(i)
          savefile.flush() #flushes buffer, saving RAM
      savefile.close()
      

      【讨论】:

      • 很好的例子,我喜欢它,它看起来稳定在 18mb,所以没什么大不了的。通过我不明白为什么会有缓冲区,这是因为 ram 比 hdd 快得多,因此它可以一次全部写入而不是 1 个 1。或者是因为某些文件运行得非常快,因此不允许 hdd跟上程序的速度?
      • @Uber - 每次添加一行时写入磁盘效率非常低。总而言之,最好让计算机等待并一次写入所有内容。
      • 是的,我调查过了。我会保持原样,因为它不会超过 18.5mb。感谢您的帮助!
      【解决方案3】:

      直到你调用 .close().flush() 或者直到它达到指定的缓冲区大小,Python 才会写入文件。这个问题可能会对你有所帮助:How often does python flush to a file?

      【讨论】:

      • 啊,太好了,我刚刚检查了一下,它是 18MB 并且还在增加,所以这就是我这么认为的原因。会调查同花顺,谢谢先生!
      • 请注意,要将其刷新到实际磁盘,您可能还需要调用 os.fysnc() stackoverflow.com/questions/7127075/…
      猜你喜欢
      • 2011-10-31
      • 1970-01-01
      • 2011-04-13
      • 2011-01-21
      • 2021-06-24
      • 1970-01-01
      • 2016-11-11
      • 1970-01-01
      相关资源
      最近更新 更多