2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonのprintが遅れて表示される問題と解決策

Posted at

はじめに

Pythonのprint文には出力バッファリングという仕組みがあり、標準出力に出力されたデータが即座に表示されないことがあります。
特に重い処理の中でprintを使うと、処理完了後にまとめて表示されることがあり、リアルタイムでデバッグしたい場合には困ることがあります。

私はPythonを使って解析を行うことがあり、処理中に出力を確認したいため、この機能を無効にする方法を探しました。

解決策

1.print文でflush=Trueを指定する

print("hoge", flush=True)

flush=Trueを指定すると、出力が即座に反映されます。

2.環境変数 PYTHONUNBUFFEREDを利用する

環境変数に

PYTHONUNBUFFERED=1

を設定すると、Python実行時に標準出力のバッファリングが無効になります。
これにより、print文の出力がリアルタイムで反映されるようになります。
実行前にexportコマンドで環境変数を登録すると便利です。

注意点

Pythonは内部でメモリ節約のためにバッファリングを行っています。
バッファリングを無効にするとパフォーマンス低下する場合があります。

さいごに

開発中のデバッグでは、printの出力がすぐに反映されると非常に便利です。
個人的には毎回バッファリングを無効にして使用しており、これでストレスなくリアルタイムデバッグができるようになりました。
個人的には開発環境と本番環境で違いがないようにコードを書くよう意識しているため、2つ目の環境変数の方を採用しています。
参考になれば嬉しいです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?