Seite 1 von 1

pipe probleme

Verfasst: Mittwoch 5. März 2008, 15:11
von Tomek
Folgendes Problem stellt sich für mich da:

Ich Erstelle eine Pipe und schreibe rein:

Code: Alles auswählen

	pipeName = 'pipe_radiotap'
	try:
	        os.unlink(pipeName)
	except:
	        pass
	os.mkfifo(pipeName)
	open(pipeName,'w').write(str(parse(data)))
Das Problem ist das der Programm in einer schleife ist und eben viele sachen in die pipe schreiben soll, und ein anderes Programm holt diese raus.

Es funktioniert zwar, aber immer nur so das EIN eintrag in die Pipe gemacht wird und dann das Programm WARTET bis dieses entnommen wurde und DANN erst wieder was reinschreibt.

Frage: Gibt es eine Funktion die eben kein FIFO macht sondern in die pipe reinschreibt und nicht wartet?

Und es müsste darüber hinaus so eingerichtet sein das wenn etwas gelsen wird, immer das "hinterste" elemet gelesen wird und auch wieder entfernt wird nach dem lesen.

Verfasst: Mittwoch 5. März 2008, 18:11
von BlackJack
Der Name `mkfifo()` legt ja schon irgendwie nahe, dass so eine Pipe nach dem FIFO-Prinzip arbeitet. Und die blockiert halt wenn der Puffer voll ist. Du könntest mit Threads und einer Queue arbeiten. Ein "Sende"-Thread holt sich immer Daten aus der Queue und schreibt diese in die Pipe und der Hauptthread kann an die Queue Daten zum Versenden übergeben, ohne zu blockieren.