Сообщить об ошибке.

Класс AsyncExitStack() модуля contextlib в Python

Стек обратных вызовов для асинхронного менеджера контекста

Синтаксис:

import contextlib

astack = contextlib.AsyncExitStack()

Параметры:

  • нет.

Возвращаемое значение:

Описание:

Класс AsyncExitStack() модуля contextlib асинхронный менеджер контекста, похожий на contextlib.ExitStack(), который поддерживает объединение как синхронных, так и асинхронных менеджеров контекста, а также наличие сопрограмм для логики очистки.

Метод stack.close() не реализован, вместо него следует использовать метод stack.aclose().

Методы объекта AsyncExitStack.

stack.enter_async_context(cm):

Похож на ExitStack.enter_context(), но ожидает асинхронный менеджер контекста.

Изменено в Python 3.11: вызывает TypeError вместо AttributeError, если аргумент cm не является асинхронным менеджером контекста.

stack.push_async_exit(exit):

Аналогичен stack.push(), но ожидает либо асинхронный менеджер контекста, либо функцию сопрограммы.

stack.push_async_callback(callback, *args, **kwds):

Похоже на stack.callback(), но ожидает функцию сопрограммы.

stack.aclose():

Аналогичен методу stack.close(), но правильно обрабатывает ожидание await.

Примеры:

Продолжая пример для contextlib.asynccontextmanager():

from contextlib import AsyncExitStack

async with AsyncExitStack() as astack:
    connections = [await astack.enter_async_context(get_connection()) \
                   for i in range(5)]
    # Все открытые соединения будут автоматически закрыты 
    # в конце асинхронного оператора with, даже если попытки
    # открыть соединение позже в списке вызовут исключение.