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 может значительно улучшить производительность программ, выполняющих вычислительно-интенсивные задачи, особенно на многоядерных процессорах.