проблема в основном потому, что multiprocessing
действительно предназначен для работы в системе posix, с системным вызовом fork(2)
.в этих операционных системах процесс может быть разделен на две части: дочерний процесс магически клонирует состояние от родительского элемента, и оба возобновляют работу в одном и том же месте, и у дочернего элемента теперь появляется новый идентификатор процесса.В этой ситуации multiprocessing
может организовать некоторый механизм для передачи состояния от родителя к потомку по мере необходимости, с уверенностью, что у потомка уже будет большая часть необходимого состояния питона.
Windows не имеет fork()
.
И поэтому multiprocessing
должен поднять слабину.Это в основном включает запуск нового интерпретатора Python, выполняющего многопроцессорный дочерний скрипт.Почти сразу родитель попросит ребенка использовать что-то, находящееся в состоянии родителя, и поэтому ребенку придется воссоздать это состояние с нуля, , импортировав свой сценарий в дочернее устройство .
Таким образом, все, что происходит во время импорта в вашем скрипте, будет происходить дважды, один раз в родительском и снова в дочернем, поскольку это воссоздает среду питона, необходимую для обслуживания родителя.