Zeilengepuffertes r/w
Hallo Gruppe, wie bekomme ich eine zeilengepufferte Kommunikation zwischen zwei Scripten hin? Ich habe folgende zwei Mini-Programme: Sender: ----------------------8<----------------- import time l = open('myfifo',mode='w',buffering=1) while True: s = 'einszweidrei' l.write(s + '\n') print s time.sleep(1) ----------------------8<----------------- Empfänger: ----------------------8<----------------- l = open('myfifo', buffering=1) for line in l: print line ----------------------8<----------------- wobei "myfifo" eine (per mkfifo angelegter) named pipe ist. Lasse ich jetzt die beiden laufen, erscheinen die Ausgaben im zweiten Programm stark verzögert, trotz des "line buffers", welches eingeschaltet war. Warum ist das so und wie kann ich das ändern? Viele Grüße Ole
On 30.08.11 13:53, Ole Streicher wrote:
Lasse ich jetzt die beiden laufen, erscheinen die Ausgaben im zweiten Programm stark verzögert, trotz des "line buffers", welches eingeschaltet war.
Warum ist das so und wie kann ich das ändern?
Rufe deine Skripte mit "python -u" auf: http://docs.python.org/using/cmdline.html#cmdoption-unittest-discover-u Chris
On 30.08.11 13:53, Ole Streicher wrote:
Lasse ich jetzt die beiden laufen, erscheinen die Ausgaben im zweiten Programm stark verzögert, trotz des "line buffers", welches eingeschaltet war.
Warum ist das so und wie kann ich das ändern?
Rufe deine Skripte mit "python -u" auf: http://docs.python.org/using/cmdline.html#cmdoption-unittest-discover-u Chris
Was ist mit l.flush() ? Am 30.08.2011 13:53, schrieb Ole Streicher:
Hallo Gruppe,
wie bekomme ich eine zeilengepufferte Kommunikation zwischen zwei Scripten hin? Ich habe folgende zwei Mini-Programme:
Sender: ----------------------8<----------------- import time l = open('myfifo',mode='w',buffering=1) while True: s = 'einszweidrei' l.write(s + '\n') print s time.sleep(1) ----------------------8<-----------------
Empfänger: ----------------------8<----------------- l = open('myfifo', buffering=1) for line in l: print line ----------------------8<-----------------
wobei "myfifo" eine (per mkfifo angelegter) named pipe ist. Lasse ich jetzt die beiden laufen, erscheinen die Ausgaben im zweiten Programm stark verzögert, trotz des "line buffers", welches eingeschaltet war.
Warum ist das so und wie kann ich das ändern?
Viele Grüße
Ole _______________________________________________ python-de maillist - python-de@python.org http://mail.python.org/mailman/listinfo/python-de
-- Mfg. Jens Diemer ---- http://www.jensdiemer.de
Ole Streicher schrieb:
Sender: ----------------------8<----------------- import time l = open('myfifo',mode='w',buffering=1) while True: s = 'einszweidrei' l.write(s + '\n') print s time.sleep(1) ... wobei "myfifo" eine (per mkfifo angelegter) named pipe ist. Lasse ich jetzt die beiden laufen, erscheinen die Ausgaben im zweiten Programm stark verzögert, trotz des "line buffers", welches eingeschaltet war.
Warum ist das so und wie kann ich das ändern?
Du bekommst die Verzögerung nicht trotz, sondern gerade durch den Buffer. Jedenfalls auf Senderseite. Da wird mit dem Senden der Daten gewartet, bis genug Daten im Puffer sind, damit sich das Versenden auch lohnt. Frank
Frank Ursel <sexyspamcatcher@trash-mail.com> writes:
Ole Streicher schrieb:
l = open('myfifo',mode='w',buffering=1) while True: Lasse ich jetzt die beiden laufen, erscheinen die Ausgaben im zweiten Programm stark verzögert, trotz des "line buffers", welches eingeschaltet war.
Du bekommst die Verzögerung nicht trotz, sondern gerade durch den Buffer. Jedenfalls auf Senderseite. Da wird mit dem Senden der Daten gewartet, bis genug Daten im Puffer sind, damit sich das Versenden auch lohnt.
Nö: ich habe ja "line buffer" eingeschaltet (und damit den normalen fixed-buffer *ausgeschaltet*), was bedeutet, dass ich gerne alles bis zum nächsten Newline gepuffert hätte. Damit wartet er eben nicht, bis genug Daten im Puffer sind, sondern nur bis zum nächsten Newline. Und die Senderseite ist auch gar nicht das Problem. Ole
participants (5)
-
Christopher Arndt
-
Christopher Arndt
-
Frank Ursel
-
Jens Diemer
-
Ole Streicher