Python写文件时不自动刷新内容导致内存溢出
我写了一个简单的Python程序,用来生成一个很大的文本文件:
import sys
import random
f = open('data.txt', 'w')
for i in range(100000000):
f.write(str(i) + "\t" + str(random.randint(0,1000)) + "\n")
f.close()
当我用CPython运行它时,它会占用所有可用的操作系统内存,但什么都不往文件里写。
当我在Jython上运行时,我会得到一个OutOfMemoryException
(内存溢出异常)。
据我了解,它把所有东西都存储在内存缓冲区里,并且在调用close()
之前从来没有进行过数据的刷新。
我的问题是:如何限制文件缓冲区的大小,并触发自动刷新?我不想手动调用flush()
,我觉得这样做在性能上是不太好的。我希望当文件缓冲区满了的时候,flush()
能自动被调用。
谢谢!
2 个回答
-1
你有没有试过在调用 open
函数的时候,给它传一个缓冲区的大小呢?可以参考这个链接了解更多信息:传入缓冲区大小
f = open('data.txt', 'w', 5000)
9
缓冲并不是问题所在。真正的问题是你在调用 range()
函数时传入了一个巨大的参数,这会试图分配一个包含很多元素的数组。如果你只是简单地写下面这段代码,你也会遇到同样的错误:
r = range(100000000)