← index #5843Issue #5947
Off-topic · high · value 0.530
QUERY · ISSUE

extmod/uasyncio: Loop exits if only Tasks awaiting Events are added

openby kevinkk525opened 2020-03-30updated 2021-02-18
extmod

If only Tasks are added to the Loop that are waiting for an Event to be set (or a Lock to be acquired but that makes no sense at all), the loop exits because those Tasks get removed from the main queue and put onto the waiting queue of the Event.
Use-case: Event is waiting to be set from an ISR. Will probably only ever be used without other Tasks running in minimal test-cases but would then be a problematic bug.

Expected behaviour: Loop continues to run. This needs #5795 (Events from ISR). Otherwise this problem will of course never occur.

>>> import uasyncio as asyncio
>>> ev=asyncio.Event()
>>> async def wait():
...     print("started waiting")
...     await ev.wait()
...     print("got event")
...
...
...
>>> asyncio.run(wait())
started waiting
>>>
CANDIDATE · ISSUE

uasyncio: feature request: multiple event loops

openby traversedaopened 2020-04-20updated 2023-02-10
extmod

I think this needs to go here and not in the micropython-libs repo...

A project I'm working on has two main contexts code can run in. Previously I had modeled those two contexts as two different event loops, with an explicit hand-off between them.

One loop was the "motion control" event loop. It was a higher priority and there were only specific spots it would be able to stop at safely. I could turn it into a blocking function (with the help of interrupts to handle some edge cases) but there are reasons why it's better for it to be co-operative multi-tasking based. The idea was that it would call motionLoop.stop() at regular intervals to allow the general loop to run.

The other loop was the general purpose loop which would run things like user plugins, a web interface, GC, etc.

Any thoughts?

Keyboard

j / / n
next pair
k / / p
previous pair
1 / / h
show query pane
2 / / l
show candidate pane
c
copy suggested comment
r
toggle reasoning
g i
go to index
?
show this help
esc
close overlays

press ? or esc to close

copied