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