Python写文件时不自动刷新内容导致内存溢出

1 投票
2 回答
737 浏览
提问于 2025-04-15 19:46

我写了一个简单的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)

撰写回答