OPが投稿したサンプルコードを見ると、Pythonが何をしているのかについて誤解があると思います。
すなわち:
「一行ずつ読む」
import codecs
for i in codecs.open('unicodefile','r','utf8'):
print i
上記は、行ごとに読み取っているように見えます。ただし、Python はこれを「ファイルをできるだけ多くメモリに読み込み、それぞれを 1 行として処理する」と解釈します。つまり、上記の for ループはすべてをメモリに読み込みます。
「RAMへの読み込み」
import codecs
for i in codecs.open('unicodefile','r','utf8').readlines():
print i
上記は、上記の「行ごと」の例と実質的に同じであると思います。つまり、Python はすべてをメモリに読み込んでいます。
行ごとのパフォーマンスをテストしたい場合は、「readlines()」または「readlines()」を意味する可能性のある未指定の for ループではなく、「readline()」が必要です。これは、StackOverflow サイトの別の場所に記載されています。
考慮すべきもう 1 つの側面は、ファイルシステムのバッファリングです。同じファイルに対して同じビットのコードを実行している場合、ファイルシステムのバッファリングが結果を汚染するリスクがあります。あなたが言うように、200GB の RAM があります。これは、実行結果に影響を与えるのに十分なファイルをバッファリングするのに十分です。
クリーンなテスト結果を確保するには、次のことを行う必要があります。
1) 大きなファイルを既知のソースから新しいファイル名にコピーします。(ファイルシステムは COW ファイルシステムである必要はありません。) 2) ファイルシステムのキャッシュをフラッシュします。3) ファイルに対して最初のテストを実行します。4) ファイルを削除します。5) ファイルをソースから別の新しいファイル名に再コピーします。6) ファイルシステムのキャッシュをフラッシュします。7) 新しいファイルに対して 2 番目のテストを実行します。
これにより、ファイルの読み込み時間をより正確にテストできます。
ファイル全体を一度にメモリにロードしたい場合、 filehandle.read(bytes to read) は、ファイルの内容をブロックで読み取るためのより高速な手段を提供する可能性はありませんか?
どちらの場合も、参考までに:
http://docs.python.org/2/tutorial/inputoutput.html