如何减少 sys.stdin 的缓冲区大小
执行命令时:
<code class="bash">memcached -vv 2>&1 | tee memkeywatch2010098.log 2>&1 | ~/bin/memtracer.py | tee memkeywatchCounts20100908.log</code>
观察到在 memkeywatchYMD.log 大小超过 15-18K 之前,memtracer.py 不会开始接收输入。为了解决这个问题,有两种方法:
使用无缓冲标志 (-u)
Python 提供了一个无缓冲标志 -u,可以从 stdin/stdout 中删除缓冲。通过使用此标志调用 Python:
<code class="bash">python -u ~/bin/memtracer.py</code>
您可以完全消除 stdin 和 stdout 的缓冲。
创建具有不同缓冲的新文件对象
您还可以创建一个新的文件对象,其底层文件描述符与标准输入相同,但缓冲区大小较小。这可以使用 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中文网其他相关文章!