summaryrefslogtreecommitdiffstats
path: root/Modules/_asynciomodule.c
diff options
context:
space:
mode:
Diffstat (limited to 'Modules/_asynciomodule.c')
-rw-r--r--Modules/_asynciomodule.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c
index 32be537..6fe4ca4 100644
--- a/Modules/_asynciomodule.c
+++ b/Modules/_asynciomodule.c
@@ -3314,6 +3314,44 @@ _asyncio__leave_task_impl(PyObject *module, PyObject *loop, PyObject *task)
}
+/*[clinic input]
+_asyncio.current_task
+
+ loop: object = None
+
+Return a currently executed task.
+
+[clinic start generated code]*/
+
+static PyObject *
+_asyncio_current_task_impl(PyObject *module, PyObject *loop)
+/*[clinic end generated code: output=fe15ac331a7f981a input=58910f61a5627112]*/
+{
+ PyObject *ret;
+ asyncio_state *state = get_asyncio_state(module);
+
+ if (loop == Py_None) {
+ loop = _asyncio_get_running_loop_impl(module);
+ if (loop == NULL) {
+ return NULL;
+ }
+ } else {
+ Py_INCREF(loop);
+ }
+
+ ret = PyDict_GetItemWithError(state->current_tasks, loop);
+ Py_DECREF(loop);
+ if (ret == NULL && PyErr_Occurred()) {
+ return NULL;
+ }
+ else if (ret == NULL) {
+ Py_RETURN_NONE;
+ }
+ Py_INCREF(ret);
+ return ret;
+}
+
+
/*********************** Module **************************/
@@ -3494,6 +3532,7 @@ fail:
PyDoc_STRVAR(module_doc, "Accelerator module for asyncio");
static PyMethodDef asyncio_methods[] = {
+ _ASYNCIO_CURRENT_TASK_METHODDEF
_ASYNCIO_GET_EVENT_LOOP_METHODDEF
_ASYNCIO_GET_RUNNING_LOOP_METHODDEF
_ASYNCIO__GET_RUNNING_LOOP_METHODDEF