2009-04-19 2 views
13

Учитывая отсутствие вызова fork() Windows, как пакет многопроцессорности в Python 2.6 реализован под Windows? В дополнение к потокам Win32 или какой-то поддельной вилке или просто совместимости поверх существующей многопоточности?Как многопроцессор Python реализован в Windows?

+3

Если Адам ответил на ваш вопрос, вы должны отметить его как принятый :-) –

ответ

29

Это делается с использованием вызова подпроцесса sys.executable (т. Е. Запускает новый процесс Python), а затем сериализует все глобальные переменные и отправляет их по каналу. Бедное человеческое клонирование текущего процесса. Это является причиной появления extra restrictions при использовании многопроцессорной обработки на платформе Windows.

Вы также можете быть заинтересованы в просмотре Jesse Noller's talk from PyCon о многопроцессорности, где он обсуждает его использование.

+4

Адам прав (я - Джесси) - это неудачно, но все «реализации» fork на win32 - ужасные хаки. Поэтому мы застряли в подпроцессе и сериализации – jnoller

+0

Большое спасибо за четкий ответ! – 2009-04-19 15:53:09

+1

Jeff: вы должны пометить этот ответ как принятый, если вы довольны этим. – Adam