Выбор ответа Middle GIL, потоки и процессы обновлено
Пул процессов без if __name__ == "__main__"
Вопрос
Зачем при использовании multiprocessing на macOS и Windows код запуска пула кладут под if __name__ == "__main__":?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: spawn заново импортирует главный модуль и снова создаст пул. Метод spawn запускает новый интерпретатор, который импортирует модуль с функцией.
Варианты ответа
- Иначе дочерние процессы будут разделять один GIL с родителем
- Это нужно только для красоты кода и подсказок линтера
- Без этого процессы пула запускаются последовательно
- spawn заново импортирует главный модуль и снова создаст пулправильный ответ
Разбор
Метод spawn запускает новый интерпретатор, который импортирует модуль с функцией. Если создание пула лежит на верхнем уровне, импорт снова создаст пул, и Python остановит это с ошибкой о попытке запустить процесс до завершения инициализации. GIL у процессов и так свой, а на параллельность защита не влияет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.