Rubyでバッチ処理のようなものを書いていたときに、一件出力するごとに結果を標準出力に吐くようにプログラムを書いた時の話です。
処理が進んでいるにもかかわらず、結果が出力されず、しばらく経ってから一気に出力されました。
調べてみると、Rubyは標準出力をバッファリングするようです。
バッファリングさせないようにするには、スクリプトの先頭に、
$stdout.sync = true
というコードを書いておけば、標準出力はバッファリングされず、直接出力されます。
ちなみに
ファイル出力の場合は、
file = new File('hoge.txt', 'w') file.sync = true
とすればよいようです。