Ich laufe mit den folgenden Bash-Befehlsmustern Memcached:Einstellung der kleineren Puffergröße für sys.stdin?
memcached -vv 2>&1 | tee memkeywatch2010098.log 2>&1 | ~/bin/memtracer.py | tee memkeywatchCounts20100908.log
, um zu versuchen und die Spur unerreicht bekommt breit für Schlüssel-Plattform setzt.
Das Memtracer-Skript ist unten und funktioniert wie gewünscht, mit einem kleinen Problem. Wenn Sie die Größe der Zwischenprotokolldatei beobachten, beginnt memtracer.py erst mit der Eingabe, bis die Datei memkeywatchYMD.log ungefähr 15-18 KB groß ist. Gibt es eine bessere Möglichkeit, stdin zu lesen oder eine Möglichkeit, die Puffergröße für schnellere Antwortzeiten auf unter 1k zu reduzieren?
#!/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],)
danke, die -u-Flagge für eine Linux-Umgebung war der Gewinner. Ich hatte vorher os.fdopen ausprobiert und lief auf dasselbe Pufferungsproblem, selbst wenn ich die Puffergröße auf 10 setze. – David
Unglücklicherweise öffnet Python 3 hartnäckig 'stdin' im gepufferten Textmodus. Nur "stdout" und "stderr" sind jetzt von dem Schalter "-u" betroffen. –
Irgendwelche Work-arounds für Python3? Vielleicht eine ereignisgesteuerte Bibliothek/Option? –