Как работает async with?
Каким образом работает конструкция:
async with
В вопросе я опираюсь на первые строки примеров aiohttp.
Ответы (1 шт):
Автор решения: Dareten
→ Ссылка
from aiohttp import web
async def hello(request):
return web.Response(text='Hello, world')
async def test_hello(aiohttp_client, loop):
app = web.Application()
app.router.add_get('/', hello)
client = await aiohttp_client(app)
resp = await client.get('/')
assert resp.status == 200
text = await resp.text()
assert 'Hello, world' in text
Например, вот так.
По сути это тот же контекстный менеджер with, который имеет 2 дополнительных метода __aenter__ и __aexit__, что позволяет пользоваться контекстным менеджером для асинхронных приложений.
Использование обычного менеджера with не предусмотрено для асинхронных функций, так как у него не соответствующих методов. Разница в работе между with и async with в том, что второй не только выполняет все критические функции внутри, а также позволяет быть уверенным, что внутренний блок инструкций был awaited.
Документация по async with здесь.