Ich versuche eine einfache Idee zu implementieren, eine Daten von stdin an eine Coroutine zu übergeben:
%Vor% Dieser Code funktioniert gut, aber eine vereinfachte Version davon mit einer Variablen anstelle eines Event
-Objekts funktioniert auch:
Meine Fragen sind: ist der Ansatz mit Event
korrekt? Oder gibt es einen besseren Weg mit anderen asyncio-Objekten, um diese Art von Problem zu lösen?
Dann, wenn der Ansatz mit Event
in Ordnung ist, ist die Verwendung einer Variablen auch in Ordnung?
Danke.
Ich denke, asyncio.Queue
ist für diese Art viel besser geeignet Erzeuger / Verbraucher-Beziehung:
Es ist weniger Logik als mit einem Event
, das Sie sicherstellen müssen, dass Sie richtig setzen / entsperren, und es gibt keine Notwendigkeit für ein sleep
, aufwachen, überprüfen, zurück in den Ruhezustand, Schleife, wie mit dem Globale Variable. Der Queue
-Ansatz ist also einfacher, kleiner und blockiert die Ereignisschleife weniger als Ihre anderen möglichen Lösungen. Die anderen Lösungen sind technisch korrekt , da sie richtig funktionieren (solange Sie keine yield from
Aufrufe innerhalb einfügen, wenn if event.is_set()
und if data is not None:
Blöcke). Sie sind nur ein bisschen klobig.
Wenn Sie auf ein Ereignis warten möchten, sollten Sie wahrscheinlich % verwenden. co_de% statt polling Event.wait
.
Tags und Links python python-3.x python-asyncio python-3.4 coroutine