estoy corriendo MemCached con el siguiente patrón de comandos bash:Estableciendo un tamaño de búfer más pequeño para sys.stdin?
memcached -vv 2>&1 | tee memkeywatch2010098.log 2>&1 | ~/bin/memtracer.py | tee memkeywatchCounts20100908.log
para tratar de localizar a inigualable llega a juegos para la plataforma de teclas de ancho.
El script memtracer está a continuación y funciona como se desee, con un pequeño inconveniente. Al observar el tamaño de archivo de registro intermedio, memtracer.py no comienza a recibir entrada hasta que memkeywatchYMD.log tenga un tamaño de aproximadamente 15-18K. ¿Hay una mejor manera de leer en stdin o quizás una forma de reducir el tamaño del buffer a menos de 1k para tiempos de respuesta más rápidos?
#!/usr/bin/python
import sys
from collections import defaultdict
if __name__ == "__main__":
keys = defaultdict(int)
GET = 1
SET = 2
CLIENT = 1
SERVER = 2
#if <
for line in sys.stdin:
key = None
components = line.strip().split(" ")
#newConn = components[0][1:3]
direction = CLIENT if components[0].startswith("<") else SERVER
#if lastConn != newConn:
# lastConn = newConn
if direction == CLIENT:
command = SET if components[1] == "set" else GET
key = components[2]
if command == SET:
keys[key] -= 1
elif direction == SERVER:
command = components[1]
if command == "sending":
key = components[3]
keys[key] += 1
if key != None:
print "%s:%s" % (key, keys[key],)
gracias, la bandera -u para un entorno Linux fue la ganadora. Anteriormente había intentado usar os.fdopen y me encontré con el mismo problema de almacenamiento en el búfer, incluso si configuré el tamaño del búfer en 10. – David
Desafortunadamente, Python 3 todavía obstinadamente abre 'stdin' en el modo de texto en búfer. Solo 'stdout' y' stderr' se ven afectados por el interruptor '-u' ahora. –
¿Alguna solución alternativa para Python3? ¿Quizás una biblioteca/opción impulsada por eventos? –