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 を使用して起動すると、利用可能なすべての OS メモリが消費され、ファイルには何も書き込まれません。

Jythonで起動すると、OutOfMemoryException.

私が理解している限り、すべてをメモリバッファに保存し、close()呼び出し前にフラッシュしませんでした。

私の質問は: ファイル バッファを制限し、autoflush をトリガーする方法は? 手動で呼び出したくありません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 に答える