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Сообщить о неточности