Выбор ответа Senior GIL, потоки и процессы обновлено

Почему numpy может работать параллельно в потоках

Вопрос

Почему операции numpy над большими массивами иногда ускоряются в потоках, хотя чистый Python нет?

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

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

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

Коротко

Правильный ответ: Код numpy на C отпускает GIL на время тяжёлых вычислений. Расширения на C могут явно отпустить GIL, когда не трогают объекты Python, и numpy делает это во многих операциях.

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

  1. numpy запускает отдельный интерпретатор Python для каждого массива
  2. GIL не распространяется на объекты типа ndarray
  3. Потоки numpy автоматически становятся процессами
  4. Код numpy на C отпускает GIL на время тяжёлых вычисленийправильный ответ

Разбор

Расширения на C могут явно отпустить GIL, когда не трогают объекты Python, и numpy делает это во многих операциях. Тогда несколько потоков реально считают параллельно. Отдельных интерпретаторов и процессов numpy не создаёт, а сам GIL распространяется на весь байткод, просто во время C-вычислений его не держат.

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

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