gh-97696: Improve and fix documentation for asyncio eager tasks (#104256)

This commit is contained in:
Itamar Ostricher 2023-05-08 04:59:34 -07:00 committed by GitHub
parent 15665d896b
commit c2683fc46d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 2 deletions

View file

@ -560,6 +560,13 @@ Eager Task Factory
using the provided *custom_task_constructor* when creating a new task instead
of the default :class:`Task`.
*custom_task_constructor* must be a *callable* with the signature matching
the signature of :class:`Task.__init__ <Task>`.
The callable must return a :class:`asyncio.Task`-compatible object.
This function returns a *callable* intended to be used as a task factory of an
event loop via :meth:`loop.set_task_factory(factory) <loop.set_task_factory>`).
.. versionadded:: 3.12
@ -1014,7 +1021,7 @@ Introspection
Task Object
===========
.. class:: Task(coro, *, loop=None, name=None, context=None)
.. class:: Task(coro, *, loop=None, name=None, context=None, eager_start=False)
A :class:`Future-like <Future>` object that runs a Python
:ref:`coroutine <coroutine>`. Not thread-safe.
@ -1054,6 +1061,13 @@ Task Object
If no *context* is provided, the Task copies the current context
and later runs its coroutine in the copied context.
An optional keyword-only *eager_start* argument allows eagerly starting
the execution of the :class:`asyncio.Task` at task creation time.
If set to ``True`` and the event loop is running, the task will start
executing the coroutine immediately, until the first time the coroutine
blocks. If the coroutine returns or raises without blocking, the task
will be finished eagerly and will skip scheduling to the event loop.
.. versionchanged:: 3.7
Added support for the :mod:`contextvars` module.
@ -1067,6 +1081,9 @@ Task Object
.. versionchanged:: 3.11
Added the *context* parameter.
.. versionchanged:: 3.12
Added the *eager_start* parameter.
.. method:: done()
Return ``True`` if the Task is *done*.

View file

@ -1 +1,2 @@
Optimize :class:`asyncio.TaskGroup` when using :func:`asyncio.eager_task_factory`. Skip scheduling done callbacks when all tasks finish without blocking.
Optimize :class:`asyncio.TaskGroup` when using :func:`asyncio.eager_task_factory`.
Skip scheduling a done callback if a TaskGroup task completes eagerly.