How to Reduce Buffer Size for sys.stdin
When executing the command:
<code class="bash">memcached -vv 2>&1 | tee memkeywatch2010098.log 2>&1 | ~/bin/memtracer.py | tee memkeywatchCounts20100908.log</code>
it was observed that memtracer.py does not start receiving input until memkeywatchYMD.log exceeds 15-18K in size. To address this, there are two approaches:
Using the unbuffered flag (-u)
Python provides an unbuffered flag -u that removes buffering from stdin/stdout. By calling Python with this flag:
<code class="bash">python -u ~/bin/memtracer.py</code>
you can completely eliminate buffering for stdin and stdout.
Creating a new file object with different buffering
You can also create a new file object with the same underlying file descriptor as standard input but with a smaller buffer size. This can be achieved using 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>
This code should allow you to read from standard input with a buffer size of only 100 bytes, resulting in faster response times. Note that this approach may have platform-specific limitations, so thorough testing is recommended.
The above is the detailed content of How to Reduce Buffer Size for sys.stdin?. For more information, please follow other related articles on the PHP Chinese website!