summaryrefslogtreecommitdiff
path: root/Doc/library/contextlib.rst
diff options
context:
space:
mode:
Diffstat (limited to 'Doc/library/contextlib.rst')
-rw-r--r--Doc/library/contextlib.rst38
1 files changed, 38 insertions, 0 deletions
diff --git a/Doc/library/contextlib.rst b/Doc/library/contextlib.rst
index faa6c8ac23..54d3a8e429 100644
--- a/Doc/library/contextlib.rst
+++ b/Doc/library/contextlib.rst
@@ -435,6 +435,44 @@ Functions and classes provided:
callbacks registered, the arguments passed in will indicate that no
exception occurred.
+.. class:: AsyncExitStack()
+
+ An :ref:`asynchronous context manager <async-context-managers>`, similar
+ to :class:`ExitStack`, that supports combining both synchronous and
+ asynchronous context managers, as well as having coroutines for
+ cleanup logic.
+
+ The :meth:`close` method is not implemented, :meth:`aclose` must be used
+ instead.
+
+ .. method:: enter_async_context(cm)
+
+ Similar to :meth:`enter_context` but expects an asynchronous context
+ manager.
+
+ .. method:: push_async_exit(exit)
+
+ Similar to :meth:`push` but expects either an asynchronous context manager
+ or a coroutine.
+
+ .. method:: push_async_callback(callback, *args, **kwds)
+
+ Similar to :meth:`callback` but expects a coroutine.
+
+ .. method:: aclose()
+
+ Similar to :meth:`close` but properly handles awaitables.
+
+ Continuing the example for :func:`asynccontextmanager`::
+
+ async with AsyncExitStack() as stack:
+ connections = [await stack.enter_async_context(get_connection())
+ for i in range(5)]
+ # All opened connections will automatically be released at the end of
+ # the async with statement, even if attempts to open a connection
+ # later in the list raise an exception.
+
+ .. versionadded:: 3.7
Examples and Recipes
--------------------