Проверяет знание асинхронного протокола контекстного менеджера (async with).
Для async with класс должен реализовать методы __aenter__ и __aexit__, оба могут быть корутинами (async def). __aenter__ возвращает ресурс, __aexit__ обрабатывает исключения и освобождает ресурс асинхронно.
async def __aenter__(self):
Инициализирует ресурс асинхронно.
async def __aexit__(self, exc_type, exc_val, exc_tb):
Завершает работу, может делать await.
Пример:
class AsyncCM:
async def __aenter__(self):
self.conn = await open_connection()
return self.conn
async def __aexit__(self, t, v, tb):
await self.conn.close()
async with AsyncCM() as conn:
data = await conn.read()Применение:
Асинхронные соединения, транзакции, потоки.