import contextlib # Новое в версии 3.10. contextlib.aclosing(thing)
thing
- асинхронный генератор, требующий освобождения ресурсов.Функция aclosing()
модуля contextlib
возвращает асинхронный менеджер контекста, который вызывает метод thing.aclose()
объекта thing
по завершении блока.
Это в основном эквивалентно:
``pythonfrom contextlib import asynccontextmanager
@asynccontextmanagerasync def aclosing(thing):try:yield thingfinally:await thing.aclose()```
Примечательно, что contextlib.aclosing()
поддерживает детерминированную очистку асинхронных генераторов, когда они завершаются раньше из-за прерывания [break
][break-continue] или исключения. Например:
from contextlib import aclosing async with aclosing(my_generator()) as values: async for value in values: if value == 42: break
Этот шаблон гарантирует, что асинхронный код выхода генератора выполняется в том же контексте, что и его итерации. Так что исключения и контекстные переменные работают должным образом, а код выхода не запускается по истечении времени существования некоторой задачи, от которой он зависит.
Новое в версии 3.10.