diff options
| author | Damien George <damien@micropython.org> | 2024-06-18 17:35:24 +1000 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2024-06-18 22:23:16 +1000 |
| commit | e9c898cb3312c2e2cf9e0da1d099541bf7bdf4d2 (patch) | |
| tree | 0f99a3264aa04767883a85cd8d173a88c3ba06cf /tests | |
| parent | a053e639147d97c4a306ab272c12d9520a80e805 (diff) | |
webassembly/asyncio: Support top-level await of asyncio Task and Event.
This change allows doing a top-level await on an asyncio primitive like
Task and Event.
This feature enables a better interaction and synchronisation between
JavaScript and Python, because `api.runPythonAsync` can now be used (called
from JavaScript) to await on the completion of asyncio primitives.
Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ports/webassembly/asyncio_top_level_await.mjs | 25 | ||||
| -rw-r--r-- | tests/ports/webassembly/asyncio_top_level_await.mjs.exp | 7 |
2 files changed, 32 insertions, 0 deletions
diff --git a/tests/ports/webassembly/asyncio_top_level_await.mjs b/tests/ports/webassembly/asyncio_top_level_await.mjs new file mode 100644 index 000000000..d8a9cad42 --- /dev/null +++ b/tests/ports/webassembly/asyncio_top_level_await.mjs @@ -0,0 +1,25 @@ +// Test top-level await on asyncio primitives: Task, Event. + +const mp = await (await import(process.argv[2])).loadMicroPython(); + +await mp.runPythonAsync(` +import asyncio + +async def task(event): + print("task set event") + event.set() + print("task sleep") + await asyncio.sleep(0.1) + print("task end") + +event = asyncio.Event() +t = asyncio.create_task(task(event)) + +print("top-level wait event") +await event.wait() +print("top-level wait task") +await t +print("top-level end") +`); + +console.log("finished"); diff --git a/tests/ports/webassembly/asyncio_top_level_await.mjs.exp b/tests/ports/webassembly/asyncio_top_level_await.mjs.exp new file mode 100644 index 000000000..7232c5d4f --- /dev/null +++ b/tests/ports/webassembly/asyncio_top_level_await.mjs.exp @@ -0,0 +1,7 @@ +top-level wait event +task set event +task sleep +top-level wait task +task end +top-level end +finished |
