Что такое блокирующий вызов в асинхронном коде и почему это проблема?

Блокирующий вызов удерживает поток event loop до завершения операции и не отдаёт управление другим coroutine. Поэтому один синхронный HTTP-запрос, sleep или тяжёлый расчёт задерживает множество задач.

Короткий ответ

Что ответить на собеседовании

Блокирующий вызов удерживает поток event loop до завершения операции и не отдаёт управление другим coroutine. Поэтому один синхронный HTTP-запрос, sleep или тяжёлый расчёт задерживает множество задач.

Подробный разбор

Ответ с пояснениями

Блокирующий вызов удерживает поток event loop до завершения операции и не отдаёт управление другим coroutine. Поэтому один синхронный HTTP-запрос, sleep или тяжёлый расчёт задерживает множество задач.

async def не превращает содержимое в неблокирующее. Для ожидания используйте асинхронную библиотеку и await; синхронный I/O можно вынести в ограниченный thread pool. CPU-bound Python-код обычно отправляют в процесс или отдельный сервис. Важно ограничить параллелизм и задать timeout: тысячи задач, ожидающих забитый пул, тоже создают перегрузку. Диагностировать проблему помогает event-loop lag и профиль работающего процесса.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее