Проверяет знание механики asyncio и работы цикла событий.
Асинхронность в Python строится на event loop — цикле событий, который управляет корутинами и неблокирующими вызовами I/O (через selectors с select/epoll/kqueue). При await корутина отдаёт управление loop, чтобы он мог переключиться на другие задачи, пока ждёт результата I/O.
Event Loop:
Центральный планировщик, поддерживающий очередь задач и ожидающих колбэков.
Корутины и Future:
async def создаёт корутину, возвращающую Future, которую loop завершает по событию.
Неблокирующий I/O:
Библиотека selectors абстрагирует системные вызовы для отслеживания готовности дескрипторов.
Рабочий цикл:
Loop вызывает методы .send() корутинами до первого await.
При блокирующем await задача помещается в очередь ожидания, loop переключается на готовые.
Пример работы:
import asyncio
async def fetch():
reader, writer = await asyncio.open_connection('example.com', 80)
# …
asyncio.run(fetch())