【发布时间】:2011-01-21 13:32:48
【问题描述】:
我做了一个简单的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()。
谢谢!
【问题讨论】:
-
请注意,
str(i) + "\t" + str(random.randint(0,1000)) + "\n"通常写作%d\t%d\n" % (i, random.randint(0,1000))。这是一种更常见的样式,更健壮,并且可以有更好的性能。