バッファリング
Pythonで、10万行をprint
すると12秒かかるのに、ファイルにwrite
すると1秒もかからないのはなぜ?とう質問。
ざっくり言うと、
line = "this is test"
for n in range(100000):
print(line)
には12秒くらいかかるのに、
line = "this is test\n"
ofs = file("out.txt", "w"):
for n in range(100000):
ofs.write(line)
os.fsync(ofs.fileno())
には1秒もかからない、らしい。
答えは、write
の場合は、OSが適切にバッファしてくれるから、とのこと。
Pythonでwrite
を行っても即座に物理メディアに書き込みが行われるわけではなく、書き込む量がある程度大きくなるまで
OSが勝手にバッファリングしてくれるそうだ。つまり、write
の方のループは、ほとんど待ち時間なく処理が進んでいく。
一方でprint
の方は、1行ずつ実際に画面に表示されてから次の行の出力処理が開始されるので、ループごとに待ち時間が積み重なっていく。
ということが原因だそうです。