Блокирующая для event loop операция долго не возвращает ему управление. Это бывает не только при I/O: построение списка из миллиарда элементов также занимает поток и огромный объём памяти.
Что считается блокирующей операцией в asyncio? Является ли формирование списка из миллиарда элементов блокирующим?
Блокирующая для event loop операция долго не возвращает ему управление. Это бывает не только при I/O: построение списка из миллиарда элементов также занимает поток и огромный объём памяти.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Блокирующая для event loop операция долго не возвращает ему управление. Это бывает не только при I/O: построение списка из миллиарда элементов также занимает поток и огромный объём памяти.
Пока синхронный цикл строит список, другие корутины в этом event loop не выполняются. Лучше не материализовывать ненужные данные, использовать потоковую обработку и ограниченные порции. Тяжёлые вычисления выносят в отдельный исполнитель, обычно процессы; выбор зависит от работы кода с GIL. Блокирующий код в asyncio.