ホームページ >バックエンド開発 >Python チュートリアル >パフォーマンスを向上させるために Sys.stdin のバッファ サイズを削減するにはどうすればよいですか?

パフォーマンスを向上させるために Sys.stdin のバッファ サイズを削減するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-21 11:08:02762ブラウズ

How to Reduce Buffer Size in Sys.stdin for Improved Performance?

パフォーマンス向上のために 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 を超えた後にのみ入力処理を開始します。

処理を最適化するために Sys.stdin のバッファリングを解除します

問題を解決するには, 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 サイトの他の関連記事を参照してください。

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