Pythonでサブプロセスと対話する - 西尾泰和のはてなダイアリー Python のファイルは、通常のファイルの読み込みの効率を考えて大きめ(8192バイト)のバッファリングを行っているので、ソケット通信やパイプで問題になるケースがある。 問題になるケースの一つがファイルオブジェクトをイテレータとして使って行単位の処理をする場合で、 for line in fileobj: do_something(line) のようなコードを書くと、実際には fileobj の中にあるCのFILEから一気に読み込み、その中から改行文字を探して切り出していくので、8192バイト読み出せるかファイルの終端に到達するまでブロックしてしまう。 一方、 file.readline() は、改行を見つけるまで getc() を繰り返すか、(UnixでUniversal Newlineを使わない場合は)fgets