Многопроцессорный процесс Python против автономной Python VM - PullRequest
16 голосов
/ 16 февраля 2010

Помимо простоты использования модуля multiprocessing при подключении процессов к ресурсам связи, есть ли другие различия между порождением нескольких процессов с использованием multiprocessing по сравнению с использованием subprocess для запуска отдельных виртуальных машин Python

Ответы [ 2 ]

21 голосов
/ 17 февраля 2010

На платформах Posix multiprocessing примитивы по существу обертывают os.fork(). Это означает, что в момент, когда вы запускаете процесс в многопроцессорной среде, уже импортированный / инициализированный код остается в дочернем процессе.

Это может быть благом, если у вас есть много вещей для инициализации, а затем каждый подпроцесс по существу выполняет операции (копии) этих инициализированных объектов, но не все это полезно, если вещь, которую вы запускаете в подпроцессе, совершенно не связана.

Существуют также последствия для таких ресурсов, как файловые дескрипторы, сокеты и т. Д. С multiprocessing на Unix-подобной платформе.

Между тем, когда вы используете subprocess, вы создаете совершенно новую программу / интерпретатор каждый раз, когда Popen создаете новый процесс. Это означает, что между ними может быть меньше общей памяти, но это также означает, что вы можете использовать Popen в совершенно отдельной программе или в новой точке входа в ту же программу.

В Windows различия между multiprocessing и subprocess меньше, потому что Windows не предоставляет fork().

4 голосов
/ 17 февраля 2010

Если вы игнорируете какие-либо проблемы со связью (то есть, если отдельные виртуальные машины Python не связываются между собой или общаются только через другие механизмы, которые явно установлены), других существенных различий нет. (Я полагаю, multiprocessing, при определенных условиях - в частности, Unix-подобные платформы - может использовать более эффективную fork вместо пары fork-exec, всегда подразумеваемой multiprocessing - но это не «существенно» когда задействовано всего несколько процессов [[IOW, разница в производительности при запуске не будет существенной для производительности всей системы]]).

...