multiprocessing.Process()
создает новый процесс операционной системы для параллельного выполнения кода. Он принимает целевую функцию (target
) и аргументы (args
) для этой функции. При вызове .start()
на созданном объекте Process
, происходит форк текущего процесса, создается копия адресного пространства, и новый процесс начинает выполнение указанной целевой функции. Коммуникация между процессами обычно осуществляется через очереди (Queue
) или каналы (Pipe
). Важно помнить, что изменения данных в одном процессе не видны другим процессам, если не используются механизмы межпроцессного взаимодействия.
multiprocessing.Process()
из модуля multiprocessing
в Python позволяет создавать новые процессы (потоки управления) для параллельного выполнения задач. Вот как он работает:
multiprocessing.Process(target=function, args=(arg1, arg2, ...))
, создается объект класса Process
. Этот объект представляет будущий процесс, который еще не запущен.
target
: Это функция (или вызываемый объект), которую будет выполнять новый процесс.args
: Это кортеж аргументов, которые будут переданы функции target
.process.start()
у созданного объекта Process
, происходит фактическое создание нового процесса. В большинстве операционных систем (например, Linux, macOS) используется системный вызов fork()
.
fork()
создает точную копию родительского процесса (то есть, процесса, в котором был вызван process.start()
). Эта копия включает в себя все переменные, данные, открытые файлы и состояние программы на момент вызова fork()
.multiprocessing
использует другой механизм создания процессов, который не является форком. Вместо этого, запускается новый интерпретатор Python и импортируется модуль, содержащий функцию target
. Данные между процессами передаются с помощью сериализации и десериализации (pickle).target
.multiprocessing
предоставляет различные механизмы для синхронизации и обмена данными между процессами:
Queue
: Позволяет безопасно передавать данные между процессами.Pipe
: Предоставляет двунаправленную связь между двумя процессами.Lock
: Позволяет предотвратить одновременный доступ нескольких процессов к общему ресурсу.Value
и Array
: Позволяют создавать общие переменные и массивы, к которым могут обращаться несколько процессов.target
завершает свое выполнение, или когда процесс был завершен принудительно (например, с помощью process.terminate()
). Вы можете дождаться завершения процесса, вызвав метод process.join()
.Важные моменты:
multiprocessing
, должен быть защищен блоком if __name__ == '__main__':
. Это связано с тем, что при создании новых процессов в Windows, заново выполняется весь главный модуль.multiprocessing
может значительно улучшить производительность программ, выполняющих вычислительно-интенсивные задачи, особенно на многоядерных процессорах.