Помимо простоты использования модуля multiprocessing
, когда дело доходит до подключения процессов с ресурсами связи, существуют ли какие-либо другие различия между нерестом нескольких процессов с использованием multiprocessing
по сравнению с использованием subprocess
для запуска отдельных виртуальных машин Python
Процесс многопроцессорности Python по сравнению с автономной виртуальной машиной Python
Ответ 1
На платформах Posix примитивы multiprocessing
по существу переносят os.fork()
. Это означает, что в момент, когда вы запускаете процесс многопроцессорности, уже импортированный/инициализируемый код остается таким же в дочернем процессе.
Это может быть благом, если у вас есть много вещей для инициализации, и каждый подпроцесс по существу выполняет операции над (копиями) этих инициализированных объектов, но не все это полезно, если вещь, которую вы запускаете в подпроцессе, совершенно не связана.
Имеются также последствия для таких ресурсов, как файловые дескрипторы, сокеты и т.д. с multiprocessing
на unix-подобной платформе.
Между тем, при использовании subprocess
вы создаете совершенно новую программу/интерпретатор каждый раз, когда вы Popen
новый процесс. Это означает, что между ними может быть меньше общей памяти, но это также означает, что вы можете всплывать в полностью отдельную программу или новую точку входа в ту же программу.
В Windows различия меньше между multiprocessing
и subprocess
, потому что окна не предоставляют fork()
.
Ответ 2
Если вы игнорируете какие-либо проблемы связи (то есть, если отдельные виртуальные машины Python не обмениваются между собой или не связывают только с помощью других механизмов, которые явно установлены), других существенных различий нет. (Я полагаю, что multiprocessing
, при определенных условиях - Unix-подобные платформы, в частности, могут использовать более эффективную fork
, а не пару fork-exec, всегда подразумеваемую multiprocessing
- но это не "существенное" когда задействовано всего несколько процессов [[IOW, разница в производительности при запуске не будет существенна для производительности всей системы]]).