async with

В Python ключевое слово with используется для управления ресурсами, обеспечивая корректное открытие и закрытие файлов, сетевых соединений, блокировок и других ресурсов. Аналогичным образом, в асинхронном программировании на Python можно использовать async with для управления асинхронными ресурсами.

Определение асинхронного контекстного менеджера

Асинхронные контекстные менеджеры должны реализовывать методы __aenter__ и __aexit__. Эти методы аналогичны __enter__ и __exit__ в обычных контекстных менеджерах, но они являются асинхронными и должны возвращать объекты, которые поддерживают асинхронные операции.

Обычно вы не будете писать собственные менеджеры контекста, а будете пользоваться уже готовыми из разных библиотек.

Например, асинхронные запросы к сайтам через библиотеку aiohttp используют асинхронные менеджеры контекста.

Модуль aiohttp не входит в состав стандартной библиотеки Python, а является сторонним. Его необходимо установить с помощью пакетного менеджера pip.
import asyncio
import aiohttp

async def main():
    async with aiohttp.ClientSession() as session:
        async with session.get('https://httpbin.org/get') as resp:
            print(resp.status)
            print(await resp.text())

asyncio.run(main())