ホームページ  >  記事  >  バックエンド開発  >  Python 出力が遅延するのはなぜですか? どうすればそれをリアルタイムに表示できるでしょうか?

Python 出力が遅延するのはなぜですか? どうすればそれをリアルタイムに表示できるでしょうか?

DDD
DDDオリジナル
2024-11-12 11:31:02515ブラウズ

Why is my Python output delayed, and how can I make it appear in real-time?

Python の遅延ターミナル出力について

Python はデフォルトで出力をバッファリングし、ターミナルなどの他のプログラムに個別に送信するのではなく、一度にすべて送信することでパフォーマンスを向上させます。改行がない場合、通常、print ステートメントは一度に 1 行でバッファリングされるため、意図したテキストの表示に遅れが生じます。

問題への対処

単一の Print ステートメントの場合:

  • Python 3.x: 以下に示すように、print 関数のフラッシュ パラメーターを利用して出力を明示的にフラッシュします。
for _ in range(10):
    print('.', end=' ', flush=True)
    time.sleep(.2)  # or other time-consuming work
  • Python 2.x: sys.stdout ストリームの .flush メソッドを使用して出力送信を強制します:
for _ in range(10):
    print '.',
    sys.stdout.flush()
    time.sleep(.2)  # or other time-consuming work

複数印刷の場合ステートメント:

各印刷を個別にフラッシュする代わりに、行バッファリングを完全に無効にすることができます。考えられる解決策は次のとおりです。

  • 環境変数 PYTHONUNBUFFERED を True に設定します。

    export PYTHONUNBUFFERED=1
  • fcntl モジュールを使用してファイル記述子を操作します。

    import fcntl
    
    stdout_fileno = sys.stdout.fileno()
    fcntl.fcntl(stdout_fileno, fcntl.F_SETFL, os.O_NONBLOCK)
  • tqdm や joblib などのサードパーティ ライブラリを使用して、リアルタイム更新を含む進行状況バーを提供します。

これらの手法を実装すると、出力を確実に行うことができます。ターミナルに即座に表示され、スクリプトの実行中により有益でインタラクティブなエクスペリエンスが提供されます。

以上がPython 出力が遅延するのはなぜですか? どうすればそれをリアルタイムに表示できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。