[Python-de] fifo mit readline() auslesen

Christian Helmbold c.helmbold at gmx.de
Die Feb 8 20:30:01 CET 2005


> > Aber ich will den Serverprozess auf keinen Fall schlafen legen.
> 
> Wenn du auf Daten warten willst, dann musst du in jedem Fall
> schlafen. Entweder duch eine blockierende read()-ähnliche
> Funktion, durch den timeout von select(), oder explizit.

Ich will, dass der Prozess bei read() blockiert, wenn keine Daten
anliegen.Das Problem ist nur, dass read nicht blockiert. Mit "schlafen
legen" meinte ich sowas wie sleep(). 

> Wenn du zwischendurch *im gleichen Thread* noch andere Dinge
> erledigen willst, dann wird es etwas komplizierter.

Das kommt erst noch... ;-)
 

> Möglicherweise hast du den folgende semantischen Unterschied noch
> nicht in allen Konsequenzen durchgedacht:
> - Warten darauf, bis ein anderer Prozess die fifo zum schreiben
>   öffnet.

Das war mir bewußt.

> - Warten darauf, bis aus der fifo ausreichend Daten gelesen
>   werden können.

Wenn ich das richtig sehe, reicht (jedenfalls auf meinem System) ein
einziges in die Fifo geschriebenes Zeichen aus. 

Die bisherige "Lösung" blockiert tatsächlich, aber nur bis das erste Mal
etwas in die Fifo geschrieben wird. Danach dreht die Schleife durch und
schreibt am laufenden Band "loop" auf die Konsole. Ich will aber einen
Serverprozess haben, der fortwährend Nachrichten aus einer Fifo saugt und
blockiert (d.h. vom Betriebssystem suspendiert wird), wenn keine Daten in
die Fifo geschrieben werden. Und alle bisherigen Varianten, außer das
blockierende open() in der While-Schleife, drehen, nach dem das erste Mal
etwas in die Fifo geschrieben wurde, durch.

Christian

-- 
Lassen Sie Ihren Gedanken freien Lauf... z.B. per FreeSMS
GMX bietet bis zu 100 FreeSMS/Monat: http://www.gmx.net/de/go/mail