Выбор ответа Junior GIL, потоки и процессы спрашивают часто обновлено
Потоки для сетевых запросов
Вопрос
Почему ThreadPoolExecutor ускоряет скачивание 100 страниц, несмотря на GIL?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Пока поток ждёт сеть, он отпускает GIL. Блокирующий ввод-вывод в CPython выполняется с отпущенным GIL, поэтому пока сотня потоков ждёт сети, они не мешают друг другу.
Варианты ответа
- GIL не действует на функции из модуля
urllib - Каждый поток получает свой собственный GIL
- Потоки на самом деле запускаются как отдельные процессы
- Пока поток ждёт сеть, он отпускает GILправильный ответ
Разбор
Блокирующий ввод-вывод в CPython выполняется с отпущенным GIL, поэтому пока сотня потоков ждёт сети, они не мешают друг другу. Своего GIL у потока нет, он один на интерпретатор (свой у каждого процесса). Модуль urllib не особенный, просто он ждёт сокет. Потоки остаются потоками одного процесса.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.