Python Glossary English

Python 3.7+contextlibфункция

contextlib.asynccontextmanager

менеджеры

Декоратор: превращает асинхронную генераторную функцию (один yield) в асинхронный контекстный менеджер (Python 3.7+).

Синтаксис

@contextlib.asynccontextmanager

Yield должен сработать ровно один раз: исключение из тела async with пробрасывается внутрь генератора в точку yield, поэтому освобождение ресурса кладут в finally — иначе при ошибке оно просто не выполнится. Полученный менеджер одноразовый: объект, возвращённый вызовом декорированной функции, нельзя использовать в двух async with, нужно вызывать функцию заново. С Python 3.10 результат ещё и сам является ContextDecorator для асинхронных функций, то есть его можно вешать декоратором.

Примеры

import contextlib, inspect
@contextlib.asynccontextmanager
async def cm():
    yield 1
print(hasattr(cm(), '__aenter__'))   # → True

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности