Code: Alles auswählen
import uasyncio
import random
async def ir_system(callback):
while True:
await uasyncio.sleep(3)
# eines von zwei Kommandos, addr egal
callback(random.choice([1, 2]), None)
def callback(queue, val, _addr):
# Notwending, um die queue zu awaiten
uasyncio.create_task(queue.put(val))
async def task1():
while True:
print("task1")
await uasyncio.sleep(1)
async def task2():
while True:
print("task2")
await uasyncio.sleep(1)
async def dispatcher(queue):
task = None
while True:
command = await queue.get()
if task:
task.cancel()
coro = task1() if command == 1 else task2()
task = uasyncio.create_task(coro)
async def main():
command_queue = uasyncio.Queue()
# Simuliert das IR-System von dir, der callback
# muss die queue kennen, also benutze ich lambda
uasyncio.create_task(ir_system(lambda val, addr : callback(command_queue, val, addr)))
# verteilt die events auf die beiden tasks
await dispatcher(command_queue)
# main guard
if __name__ == '__main__':
uasyncio.run(main())