Моя работа должна использовать параллельные методы, и я новый пользователь python. Поэтому мне интересно, можете ли вы поделиться некоторыми материалами о модулях python multiprocessing
и subprocess
. В чем разница между этими двумя?
В чем разница между многопроцессорностью и подпроцессом?
Ответ 1
Модуль subprocess
позволяет запускать и управлять другими программами. Все, что вы можете запустить с командной строки на компьютере, можно запустить и контролировать с помощью этого модуля. Используйте это, чтобы интегрировать внешние программы в свой код Python.
Модуль multiprocessing
позволяет разделить задачи, написанные на python, на несколько процессов, чтобы повысить производительность. Он предоставляет API, очень похожий на модуль threading
; он предоставляет методы для обмена данными между процессами, которые он создает, и упрощает задачу управления несколькими процессами для запуска кода Python. Другими словами, multiprocessing
позволяет вам использовать несколько процессов для ускорения выполнения ваших задач путем параллельного выполнения кода.
Ответ 2
Если вы хотите вызвать внешнюю программу (особенно, не написанную на Python), используйте subprocess
.
Если вы хотите вызвать функцию Python в подпроцессе, используйте multiprocessing
.
(Если программа написана на Python, но также является импортируемой, то я попытаюсь вызвать ее функции, используя multiprocessing
, а не вызывать ее извне через subprocess
.)
Ответ 3
Subprocess генерирует новые процессы, но помимо stdin/stdout и любых других API, которые могут реализовать другие программы, у вас нет средств для общения с ними. Его основная цель - запустить процессы, которые полностью отделены от вашей собственной программы.
Многопроцессорность также порождает новые процессы, но они запускают ваш код и предназначены для общения друг с другом. Вы используете его для разделения задач внутри вашей собственной программы на нескольких ядрах процессора.