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