ホームページ >バックエンド開発 >Python チュートリアル >パフォーマンスを向上させるために Sys.stdin のバッファ サイズを削減するにはどうすればよいですか?
プラットフォーム全体のキーの不一致の取得とセットを追跡しようとして、Bash コマンドが実行されます。
<code class="bash">memcached -vv 2>&1 | tee memkeywatch2010098.log 2>&1 | ~/bin/memtracer.py | tee memkeywatchCounts20100908.log</code>
標準入力を利用する memtracer スクリプトでは、標準入力のバッファ サイズが原因で処理に顕著な遅延が発生します。具体的には、memtracer.py は、中間ログ ファイル memkeywatchYMD.log のサイズが 15 ~ 18K を超えた後にのみ入力処理を開始します。
問題を解決するには, Python は、stdin と stdout からバッファリングを完全に削除する効果的な方法を提供し、受信データの即時処理を可能にします。 -u フラグを利用すると、バッファ サイズの制限をなくし、スクリプトの応答時間を大幅に向上させることができます。
<code class="bash">python -u memkeywatchCounts20100908.log</code>
または、- を使用してバッファリングを解除する場合は、 u フラグが特定の要件を満たしていない場合は、os.fdopen を使用して既存のファイル オブジェクトのバッファリングを変更できます。このアプローチにより、既存のファイル記述子と同じ基礎となるファイル記述子を使用して、異なるバッファリングを使用して新しいファイル オブジェクトを作成できます。例:
<code class="python">import os import sys newin = os.fdopen(sys.stdin.fileno(), 'r', 100)</code>
この変更により、newin は、標準入力と同じファイル記述子を読み取るファイル オブジェクトにバインドされますが、バッファ サイズはわずか 100 バイトです。このアプローチでは、バッファリング動作をより詳細に制御できますが、クロスプラットフォーム互換性のために追加のテストが必要です。
バッファリングされていない stdin または stdout 操作により、特にレイテンシーが大幅に削減され、パフォーマンスが向上します。大量のデータを継続的に扱う場合。ただし、バッファリングを削除すると、システム コールやカーネル インタラクションの増加など、特定の使用例で対処する必要がある他の課題も発生する可能性があることに注意してください。
以上がパフォーマンスを向上させるために Sys.stdin のバッファ サイズを削減するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。