Выбор ответа Junior GIL, потоки и процессы спрашивают часто обновлено

Потоки для сетевых запросов

Вопрос

Почему ThreadPoolExecutor ускоряет скачивание 100 страниц, несмотря на GIL?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Пока поток ждёт сеть, он отпускает GIL. Блокирующий ввод-вывод в CPython выполняется с отпущенным GIL, поэтому пока сотня потоков ждёт сети, они не мешают друг другу.

Варианты ответа

  1. GIL не действует на функции из модуля urllib
  2. Каждый поток получает свой собственный GIL
  3. Потоки на самом деле запускаются как отдельные процессы
  4. Пока поток ждёт сеть, он отпускает GILправильный ответ

Разбор

Блокирующий ввод-вывод в CPython выполняется с отпущенным GIL, поэтому пока сотня потоков ждёт сети, они не мешают друг другу. Своего GIL у потока нет, он один на интерпретатор (свой у каждого процесса). Модуль urllib не особенный, просто он ждёт сокет. Потоки остаются потоками одного процесса.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.