1

我制作了简单的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()在文件缓冲区超载时自动调用。

谢谢!

4

2 回答 2

9

缓冲不是问题。问题是range()用一个巨大的参数调用函数,它将尝试分配一个包含大量元素的数组。如果你只是说,你会得到同样的错误

r = range(100000000)
于 2010-02-26T17:48:56.147 回答
-1

您是否尝试过将缓冲区大小传递open函数?

f = open('data.txt', 'w', 5000)
于 2010-02-26T17:48:14.413 回答