Почему модуль многопроцессорности должен вызывать конкретную функцию для работы при "замораживании" для создания исполняемого файла Windows?
Multiprocessing.freeze_support()
Ответ 1
Причина заключается в отсутствии fork()
в Windows (не полностью верно). Из-за этого в Windows вилка моделируется созданием процесса new, в котором выполняется код, который выполняется в Linux в дочернем процессе. Поскольку код должен выполняться в технически несвязанных процессах, он должен быть доставлен туда до его запуска. Способ его доставки сначала заключается в мариновании, а затем отправляется через трубу от исходного процесса к новому. Кроме того, этот новый процесс информируется о том, что он должен запускать код, переданный по каналу, передавая ему аргумент командной строки --multiprocessing-fork
. Если вы посмотрите реализация функции freeze_support()
, его задача - проверить, должен ли выполняемый процесс запускать код по трубе или нет.