sys.stdin のバッファ サイズを減らす方法
コマンドを実行すると、
<code class="bash">memcached -vv 2>&1 | tee memkeywatch2010098.log 2>&1 | ~/bin/memtracer.py | tee memkeywatchCounts20100908.log</code>
が観察されました。 memtracer.py は、memkeywatchYMD.log のサイズが 15 ~ 18K を超えるまで入力の受信を開始しません。これに対処するには、2 つのアプローチがあります。
バッファリングされていないフラグ (-u) を使用する
Python には、stdin/stdout からバッファリングを削除するバッファリングされていないフラグ -u が用意されています。このフラグを使用して Python を呼び出すと:
<code class="bash">python -u ~/bin/memtracer.py</code>
標準入力と標準出力のバッファリングを完全に削除できます。
異なるバッファリングを使用して新しいファイル オブジェクトを作成します
標準入力と同じ基礎となるファイル記述子を使用して、より小さいバッファ サイズで新しいファイル オブジェクトを作成することもできます。これは、os.fdopen:
<code class="python">import os import sys # Create a new file object with a buffer size of 100 bytes newin = os.fdopen(sys.stdin.fileno(), 'r', 100) # Assign the new file object to standard input sys.stdin = newin</code>
を使用して実現できます。このコードにより、わずか 100 バイトのバッファ サイズで標準入力から読み取ることができるため、応答時間が短縮されます。このアプローチにはプラットフォーム固有の制限がある可能性があるため、徹底的なテストを行うことをお勧めします。
以上がsys.stdin のバッファ サイズを減らすにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。