При сетевом ожидании GIL обычно освобождается, поэтому другие потоки могут выполнять свои HTTP-запросы. Ускорение получается за счёт перекрытия ожиданий, а не параллельного Python CPU-кода.
Почему многопоточность может ускорить синхронные HTTP-запросы через requests, несмотря на GIL?
При сетевом ожидании GIL обычно освобождается, поэтому другие потоки могут выполнять свои HTTP-запросы. Ускорение получается за счёт перекрытия ожиданий, а не параллельного Python CPU-кода.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
При сетевом ожидании GIL обычно освобождается, поэтому другие потоки могут выполнять свои HTTP-запросы. Ускорение получается за счёт перекрытия ожиданий, а не параллельного Python CPU-кода.
Используйте ограниченный пул потоков, таймауты и разумный лимит соединений. Тогда один поток ждёт удалённый сервер, пока другие отправляют или получают данные. Эффект зависит от сети, ограничений сервера и размера ответов. Не разделяйте изменяемое состояние клиента между потоками без проверки его потокобезопасности. Если основная работа — вычисления на Python после загрузки, GIL может снова стать ограничением.