Как лучше всего реализовать многопроцессорность в Python?



Эта статья познакомит вас с многопроцессорностью в Python, а в процессе работы вы также получите программную демонстрацию.

2019 год был очень важным годом для технологического развития во всем мире. Начиная с того, что производители компьютеров добавляют больше ядер в свои ЦП и процессоры, и заканчивая выпуском более умных микросхем в мобильных телефонах, многопроцессорность больше не является мечтой. Сегодня одним из самых известных языков программирования, поддерживающих многопроцессорность, является . Благодаря введению параллельной вычислительной мощности в его выпуске, кодировщики по всему миру теперь могут легко создавать коды, которые будут выполняться одновременно, и, следовательно, время их выполнения в значительной степени.

Следующие указатели будут рассмотрены в этой статье,





как изучить визуальную студию

Начнем,

Многопроцессорность в Python

Что такое многопроцессорность?

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



Потребность в многопроцессорности

Представьте себе компьютерную систему, в процессоре которой есть только одно ядро. Если этому единственному ядру назначено несколько задач, то оно разбивает каждую задачу между ними, а затем переключается на следующую. Это не увеличит количество времени, необходимое для выполнения каждой задачи, но также снизит общую эффективность системы.

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



Система многопроцессорной обработки в Python может быть двух типов.

Многопроцессорная система

Эта система в основном имеет несколько процессоров, каждый из которых может выполнять одну задачу за раз и функционировать как независимый компонент.

Многоядерная процессорная система

Эта система имеет несколько ядер, присутствующих в одном процессоре, внутри которых ядро ​​функционирует как отдельный блок и независимо выполняет назначенные ему задачи.

Код для многопроцессорной обработки в Python

Теперь, когда вы привыкли к базовой концепции многопроцессорности, давайте рассмотрим, как многопроцессорность может быть достигнута в Python.

В Python интерпретатор содержит очень простой и интуитивно понятный API, который берет одну задачу, разбивает ее на несколько компонентов и обрабатывает их независимо.

Взгляните на программный модуль ниже, чтобы лучше понять эту концепцию многопроцессорности в python.

Пример 1

# импорт многопроцессорного модуля import multiprocessing def print_cube (num): '' 'функция для печати куба с заданным числом' '' print ('Cube: {}'. format (num * num * num)) def print_square (num): '' 'функция для печати квадрата заданного числа' '' print ('Square: {}'. format (num * num)) if __name__ == '__main__': # создание процессов p1 = multiprocessing.Process (target = print_square, args = (10,)) p2 = multiprocessing.Process (target = print_cube, args = (10,)) # запуск процесса 1 p1.start () # запуск процесса 2 p2.start () # ожидание завершения процесса 1 p1 .join () # ждать завершения процесса 2 p2.join () # оба процесса завершены print ('Done!')

Вывод

Площадь: 100

Куб: 1000

Выполнено!

Теперь давайте проанализируем эту программу, чтобы лучше понять ее.

  1. Первый шаг - импортировать модуль многопроцессорности. Для этого используйте следующий синтаксис: импорт многопроцессорной обработки.

  2. Теперь, когда модуль multiprocessing импортирован, давайте продолжим и создадим процесс. Для этого мы создаем объект класса Process и присваиваем ему следующие аргументы. Target: функция, которая должна быть выполнена этим процессом, и args: аргументы, которые необходимо передать целевой функции.

Примечание. Конструктор процесса может принимать несколько целей, а также аргументы, но в приведенном выше примере мы назначили нашему процессу только две цели и аргументы, как показано ниже.

p1 = multiprocessing.Process (target = print_square, args = (10,))

p2 = multiprocessing.Process (target = print_cube, args = (10,))

  1. Теперь, когда процесс создан, давайте напишем синтаксис для его запуска.

p1.start ()

p2.start ()

После запуска процесса текущая программа и уже выполняющаяся программа запускаются одновременно. Если в определенной ситуации вам нужно остановить выполнение текущей программы и сосредоточиться только на выполнении уже существующей, мы используем функцию соединения, как показано ниже.

p1.join ()

в чем разница между перегрузкой и переопределением

p2.join ()

Как только вы введете этот синтаксис, интерпретатор будет ждать, пока программа p1 закончит выполнение, а затем перейдет к программе p2.

Чтобы лучше понять эту концепцию, взгляните на другой пример многопроцессорной обработки в Python ниже.

Пример 2

# импорт многопроцессорного модуля import multiprocessing import os def worker1 (): # печать идентификатора процесса print ('идентификатор процесса, запущенного worker1: {}'. format (os.getpid ())) def worker2 (): # печать идентификатора процесса print ('ID процесса, запущенного worker2: {}'. Format (os.getpid ())) if __name__ == '__main__': # печать идентификатора процесса основной программы print ('ID основного процесса: {}'. Format (os .getpid ())) # создание процессов p1 = multiprocessing.Process (target = worker1) p2 = multiprocessing.Process (target = worker2) # запуск процессов p1.start () p2.start () # идентификаторы процессов print ('ID of process p1: {} '. format (p1.pid)) print (' ID процесса p2: {} '. format (p2.pid)) # ждать завершения процессов p1.join () p2.join () # оба процесса завершены print ('Оба процесса завершили выполнение!') # проверяем, живы ли процессы print ('Процесс p1 активен: {}'. format (p1.is_alive ())) print ('Процесс p2 активен: {} '.format (p2.is_alive ()))

Вывод

ID основного процесса: 18938

ID запущенного процесса worker1: 18939

ID запущенного процесса worker2: 18940

ID процесса p1: 18939

ID процесса p2: 18940

Оба процесса завершили выполнение!

Процесс p1 активен: ложь

Процесс p2 активен: ложь

Обратите внимание, что в приведенной выше программе оба процесса p1 и p2 выполняются независимо от их индивидуальных воспоминаний. Как только оба закончат выполнение, программа завершится.

На этом мы подошли к концу статьи о многопроцессорной обработке в Python.

Чтобы получить более глубокие знания о Python и его различных приложениях, вы можете для онлайн-обучения с круглосуточной поддержкой и пожизненным доступом.

Есть вопрос к нам? Упомяните их в комментариях к статье, и мы свяжемся с вами.