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
Выполнено!
Теперь давайте проанализируем эту программу, чтобы лучше понять ее.
Первый шаг - импортировать модуль многопроцессорности. Для этого используйте следующий синтаксис: импорт многопроцессорной обработки.
Теперь, когда модуль multiprocessing импортирован, давайте продолжим и создадим процесс. Для этого мы создаем объект класса Process и присваиваем ему следующие аргументы. Target: функция, которая должна быть выполнена этим процессом, и args: аргументы, которые необходимо передать целевой функции.
Примечание. Конструктор процесса может принимать несколько целей, а также аргументы, но в приведенном выше примере мы назначили нашему процессу только две цели и аргументы, как показано ниже.
p1 = multiprocessing.Process (target = print_square, args = (10,))
p2 = multiprocessing.Process (target = print_cube, args = (10,))
Теперь, когда процесс создан, давайте напишем синтаксис для его запуска.
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 и его различных приложениях, вы можете для онлайн-обучения с круглосуточной поддержкой и пожизненным доступом.
Есть вопрос к нам? Упомяните их в комментариях к статье, и мы свяжемся с вами.