gh-128307: Update docs for asyncio.create_task, TaskGroup.create_task, asyncio.create_task (#134202)

This commit is contained in:
Thomas Grainger 2025-05-22 23:54:56 +01:00 committed by GitHub
parent 2da2be4b84
commit a3d0306ca0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 40 additions and 6 deletions

View file

@ -361,7 +361,7 @@ Creating Futures and Tasks
.. versionadded:: 3.5.2 .. versionadded:: 3.5.2
.. method:: loop.create_task(coro, *, name=None, context=None, eager_start=None) .. method:: loop.create_task(coro, *, name=None, context=None, eager_start=None, **kwargs)
Schedule the execution of :ref:`coroutine <coroutine>` *coro*. Schedule the execution of :ref:`coroutine <coroutine>` *coro*.
Return a :class:`Task` object. Return a :class:`Task` object.
@ -370,6 +370,10 @@ Creating Futures and Tasks
for interoperability. In this case, the result type is a subclass for interoperability. In this case, the result type is a subclass
of :class:`Task`. of :class:`Task`.
The full function signature is largely the same as that of the
:class:`Task` constructor (or factory) - all of the keyword arguments to
this function are passed through to that interface.
If the *name* argument is provided and not ``None``, it is set as If the *name* argument is provided and not ``None``, it is set as
the name of the task using :meth:`Task.set_name`. the name of the task using :meth:`Task.set_name`.
@ -388,8 +392,15 @@ Creating Futures and Tasks
.. versionchanged:: 3.11 .. versionchanged:: 3.11
Added the *context* parameter. Added the *context* parameter.
.. versionchanged:: 3.13.3
Added ``kwargs`` which passes on arbitrary extra parameters, including ``name`` and ``context``.
.. versionchanged:: 3.13.4
Rolled back the change that passes on *name* and *context* (if it is None),
while still passing on other arbitrary keyword arguments (to avoid breaking backwards compatibility with 3.13.3).
.. versionchanged:: 3.14 .. versionchanged:: 3.14
Added the *eager_start* parameter. All *kwargs* are now passed on. The *eager_start* parameter works with eager task factories.
.. method:: loop.set_task_factory(factory) .. method:: loop.set_task_factory(factory)
@ -402,6 +413,16 @@ Creating Futures and Tasks
event loop, and *coro* is a coroutine object. The callable event loop, and *coro* is a coroutine object. The callable
must pass on all *kwargs*, and return a :class:`asyncio.Task`-compatible object. must pass on all *kwargs*, and return a :class:`asyncio.Task`-compatible object.
.. versionchanged:: 3.13.3
Required that all *kwargs* are passed on to :class:`asyncio.Task`.
.. versionchanged:: 3.13.4
*name* is no longer passed to task factories. *context* is no longer passed
to task factories if it is ``None``.
.. versionchanged:: 3.14
*name* and *context* are now unconditionally passed on to task factories again.
.. method:: loop.get_task_factory() .. method:: loop.get_task_factory()
Return a task factory or ``None`` if the default one is in use. Return a task factory or ``None`` if the default one is in use.

View file

@ -238,18 +238,24 @@ Creating Tasks
----------------------------------------------- -----------------------------------------------
.. function:: create_task(coro, *, name=None, context=None) .. function:: create_task(coro, *, name=None, context=None, eager_start=None, **kwargs)
Wrap the *coro* :ref:`coroutine <coroutine>` into a :class:`Task` Wrap the *coro* :ref:`coroutine <coroutine>` into a :class:`Task`
and schedule its execution. Return the Task object. and schedule its execution. Return the Task object.
If *name* is not ``None``, it is set as the name of the task using The full function signature is largely the same as that of the
:meth:`Task.set_name`. :class:`Task` constructor (or factory) - all of the keyword arguments to
this function are passed through to that interface.
An optional keyword-only *context* argument allows specifying a An optional keyword-only *context* argument allows specifying a
custom :class:`contextvars.Context` for the *coro* to run in. custom :class:`contextvars.Context` for the *coro* to run in.
The current context copy is created when no *context* is provided. The current context copy is created when no *context* is provided.
An optional keyword-only *eager_start* argument allows specifying
if the task should execute eagerly during the call to create_task,
or be scheduled later. If *eager_start* is not passed the mode set
by :meth:`loop.set_task_factory` will be used.
The task is executed in the loop returned by :func:`get_running_loop`, The task is executed in the loop returned by :func:`get_running_loop`,
:exc:`RuntimeError` is raised if there is no running loop in :exc:`RuntimeError` is raised if there is no running loop in
current thread. current thread.
@ -290,6 +296,9 @@ Creating Tasks
.. versionchanged:: 3.11 .. versionchanged:: 3.11
Added the *context* parameter. Added the *context* parameter.
.. versionchanged:: 3.14
Added the *eager_start* parameter by passing on all *kwargs*.
Task Cancellation Task Cancellation
================= =================
@ -330,7 +339,7 @@ and reliable way to wait for all tasks in the group to finish.
.. versionadded:: 3.11 .. versionadded:: 3.11
.. method:: create_task(coro, *, name=None, context=None) .. method:: create_task(coro, *, name=None, context=None, eager_start=None, **kwargs)
Create a task in this task group. Create a task in this task group.
The signature matches that of :func:`asyncio.create_task`. The signature matches that of :func:`asyncio.create_task`.
@ -342,6 +351,10 @@ and reliable way to wait for all tasks in the group to finish.
Close the given coroutine if the task group is not active. Close the given coroutine if the task group is not active.
.. versionchanged:: 3.14
Passes on all *kwargs* to :meth:`loop.create_task`
Example:: Example::
async def main(): async def main():