rogerb hat geschrieben: ↑Freitag 10. September 2021, 12:26
@rob87,
asyncio.gather() führt die Coroutines "read_count" und "blinker_write" quasi paralellel aus und wartet bis beide abgeschlossen sind. Man verwendet gather() nur wenn mehrere Couroutines von der Eventloop ausgeführt werden sollte. Dasist hier der Fall.
Bei dir wurden die Coroutines nacheinander ausgeführt, was natürlich keine Kommunikation über die Queue erlaubt.
Code: Alles auswählen
#...
async def read_cont(dev, eventspeicher_queue):
async for ev in dev.async_read_loop():
# Binaer input
print(repr(ev))
if ev.type == ecodes.EV_KEY:
# Input Type , ID und Wert verketten
queuestring = "K " + ev.code + " " + categorize(ev).keystate
eventspeicher_queue.put(queuestring)
#...
async def manager(dev):
inputspeicher = asyncio.Queue()
await asyncio.gather(blinker_write(inputspeicher), read_cont(dev, inputspeicher))
# Eventlistener auf Bluetoothcontoller anlagen und definieren.
dev = InputDevice("/dev/input/event1")
asyncio.run(manager(dev))
Ich habe den Code Probiert... Leider bekommen ich keine ausgabe. Mit dem Code
Kommt zumindest eine Ausgabe.
Also schein das Aufrufkonstrukt nicht zu passen. Was ich nicht verstehe sind die einzelnen Elemente .gather() /.run_until_complete() /.get_event_loop() / .async_read_loop().
nach meinem Verständnis:
gather: baut ein Konstrukt von Funktionen das unabhängig davon ob Sie schleifen enthalten "parallel" abgearbeitet werden
run_until_complete: aktiviert eine Funktion und lässt sie bis zum Ende durchlaufen (pause werden für andere Funktionen genutzt)
get_event_loop: Startet eine Eventbasierte Funktion. Zeiträume ohne Event werden für andere Funktionen genutzt
async_read_loop: liest Hardwareeingaben...
aber wie sind die zu verschachteln um die eingangs erwähnte Funktion zu realisieren? (
eine Event- und eine Interrupt - gesteuerte Funktion laufen lassen mit konsistenter Datenübergabe?)
Danke!