はじめに
Pythonのprint文には出力バッファリングという仕組みがあり、標準出力に出力されたデータが即座に表示されないことがあります。
特に重い処理の中でprintを使うと、処理完了後にまとめて表示されることがあり、リアルタイムでデバッグしたい場合には困ることがあります。
私はPythonを使って解析を行うことがあり、処理中に出力を確認したいため、この機能を無効にする方法を探しました。
解決策
1.print文でflush=Trueを指定する
print("hoge", flush=True)
flush=Trueを指定すると、出力が即座に反映されます。
2.環境変数 PYTHONUNBUFFEREDを利用する
環境変数に
PYTHONUNBUFFERED=1
を設定すると、Python実行時に標準出力のバッファリングが無効になります。
これにより、print文の出力がリアルタイムで反映されるようになります。
実行前にexportコマンドで環境変数を登録すると便利です。
注意点
Pythonは内部でメモリ節約のためにバッファリングを行っています。
バッファリングを無効にするとパフォーマンス低下する場合があります。
さいごに
開発中のデバッグでは、printの出力がすぐに反映されると非常に便利です。
個人的には毎回バッファリングを無効にして使用しており、これでストレスなくリアルタイムデバッグができるようになりました。
個人的には開発環境と本番環境で違いがないようにコードを書くよう意識しているため、2つ目の環境変数の方を採用しています。
参考になれば嬉しいです。