summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJim Mussared <jim.mussared@gmail.com>2021-02-12 14:11:18 +1100
committerDamien George <damien@micropython.org>2021-02-13 15:11:17 +1100
commit7ed99544e4cc1c09bd5abf9f54869c3122fa033b (patch)
tree768869bfd2e8950906a47d2a6d62d613e93ba60d
parentd128999938d6b44f52f4d0c6e1f5169ab3c1e7a5 (diff)
downloadmicropython-7ed99544e4cc1c09bd5abf9f54869c3122fa033b.tar.gz
micropython-7ed99544e4cc1c09bd5abf9f54869c3122fa033b.zip
extmod/uasyncio: Add asyncio.current_task().
Matches CPython behavior. Fixes #6686
-rw-r--r--docs/library/uasyncio.rst4
-rw-r--r--extmod/uasyncio/core.py4
-rw-r--r--tests/extmod/uasyncio_current_task.py25
-rw-r--r--tests/extmod/uasyncio_current_task.py.exp1
4 files changed, 34 insertions, 0 deletions
diff --git a/docs/library/uasyncio.rst b/docs/library/uasyncio.rst
index a81e532d7f..3316f908d6 100644
--- a/docs/library/uasyncio.rst
+++ b/docs/library/uasyncio.rst
@@ -40,6 +40,10 @@ Core functions
Returns the corresponding `Task` object.
+.. function:: current_task()
+
+ Return the `Task` object associated with the currently running task.
+
.. function:: run(coro)
Create a new task from the given coroutine and run it until it completes.
diff --git a/extmod/uasyncio/core.py b/extmod/uasyncio/core.py
index 6a84b0982c..d74763f6a6 100644
--- a/extmod/uasyncio/core.py
+++ b/extmod/uasyncio/core.py
@@ -264,6 +264,10 @@ def get_event_loop(runq_len=0, waitq_len=0):
return Loop
+def current_task():
+ return cur_task
+
+
def new_event_loop():
global _task_queue, _io_queue
# TaskQueue of Task instances
diff --git a/tests/extmod/uasyncio_current_task.py b/tests/extmod/uasyncio_current_task.py
new file mode 100644
index 0000000000..3165a2cf16
--- /dev/null
+++ b/tests/extmod/uasyncio_current_task.py
@@ -0,0 +1,25 @@
+# Test current_task() function
+
+try:
+ import uasyncio as asyncio
+except ImportError:
+ try:
+ import asyncio
+ except ImportError:
+ print("SKIP")
+ raise SystemExit
+
+
+async def task(result):
+ result[0] = asyncio.current_task()
+
+
+async def main():
+ result = [None]
+ t = asyncio.create_task(task(result))
+ await asyncio.sleep(0)
+ await asyncio.sleep(0)
+ print(t is result[0])
+
+
+asyncio.run(main())
diff --git a/tests/extmod/uasyncio_current_task.py.exp b/tests/extmod/uasyncio_current_task.py.exp
new file mode 100644
index 0000000000..0ca95142bb
--- /dev/null
+++ b/tests/extmod/uasyncio_current_task.py.exp
@@ -0,0 +1 @@
+True