バッファリング
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行ずつ実際に画面に表示されてから次の行の出力処理が開始されるので、ループごとに待ち時間が積み重なっていく。
ということが原因だそうです。