diff options
| author | Damien George <damien@micropython.org> | 2024-02-26 10:52:12 +1100 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2024-02-28 15:48:51 +1100 |
| commit | 8692d2602a7775fea22d75ebf5b50971dc2b968f (patch) | |
| tree | fe844a4c454c261adf0c7d25e30b25817e9d475f | |
| parent | 8fdcc25eb07731a64077b7576c5d477cf81e2dd5 (diff) | |
extmod/asyncio: Make current_task raise exception when there is no task.
Matches CPython behaviour.
Fixes issue #11530.
Signed-off-by: Damien George <damien@micropython.org>
| -rw-r--r-- | extmod/asyncio/core.py | 5 | ||||
| -rw-r--r-- | tests/extmod/asyncio_current_task.py | 11 |
2 files changed, 16 insertions, 0 deletions
diff --git a/extmod/asyncio/core.py b/extmod/asyncio/core.py index e5af3038f..8aad23451 100644 --- a/extmod/asyncio/core.py +++ b/extmod/asyncio/core.py @@ -164,6 +164,7 @@ def run_until_complete(main_task=None): dt = max(0, ticks_diff(t.ph_key, ticks())) elif not _io_queue.map: # No tasks can be woken so finished running + cur_task = None return # print('(poll {})'.format(dt), len(_io_queue.map)) _io_queue.wait_io_event(dt) @@ -188,6 +189,7 @@ def run_until_complete(main_task=None): assert t.data is None # This task is done, check if it's the main task and then loop should stop if t is main_task: + cur_task = None if isinstance(er, StopIteration): return er.value raise er @@ -242,6 +244,7 @@ async def _stopper(): pass +cur_task = None _stop_task = None @@ -291,6 +294,8 @@ def get_event_loop(runq_len=0, waitq_len=0): def current_task(): + if cur_task is None: + raise RuntimeError("no running event loop") return cur_task diff --git a/tests/extmod/asyncio_current_task.py b/tests/extmod/asyncio_current_task.py index 18058230f..a25e543d0 100644 --- a/tests/extmod/asyncio_current_task.py +++ b/tests/extmod/asyncio_current_task.py @@ -19,4 +19,15 @@ async def main(): print(t is result[0]) +try: + print(asyncio.current_task()) +except RuntimeError: + print("RuntimeError") + + asyncio.run(main()) + +try: + print(asyncio.current_task()) +except RuntimeError: + print("RuntimeError") |
