Python может быть быстрее с Python 3.11 или без него

Все хотят ускорить вычисления; это почти универсальная цель. Что, если бы ваш скрипт мог выполняться в 10 раз быстрее, чем сейчас? В этой статье мы рассмотрим многопроцессорность Python и библиотеку многопроцессорности. Мы рассмотрим, что такое многопроцессорность, ее преимущества и способы использования параллельного программирования для ускорения проектов Python.

Обзор параллелизма

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

Как правило, когда вы запускаете сценарий Python, ваш код в конечном итоге превращается в процесс, который использует только одно ядро ​​ЦП. Что, если бы вы могли использовать дополнительные ядра для своих вычислений, поскольку современные компьютеры имеют более одного ядра? Ваши расчеты на самом деле будут быстрее.

Давайте на данный момент примем это как общую предпосылку, но позже в этом эссе мы увидим, что это не всегда так.

Не вдаваясь в подробности, концепция параллелизма заключается в написании кода таким образом, чтобы он мог использовать много ядер ЦП.

Давайте посмотрим на пример, чтобы было понятнее.

Параллельные и последовательные вычисления

Подумайте о том, чтобы побыть наедине с важной задачей, которую нужно решить. Вы должны определить квадратные корни из восьми различных чисел. Как вы себя ведете? У вас не так много вариантов, я думаю. Вы рассчитываете результат после того, как начинаете с первого числа. Затем вы продолжаете с другими.

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

Хорошо, мы закончили? В этих случаях каждый друг служит ядром ЦП. На первой иллюстрации вы выполняете все этапы работы по порядку. Это известно как последовательные вычисления. Поскольку во втором примере вы используете всего четыре ядра, используются параллельные вычисления. Использование параллельных процессов или операций, разделенных на несколько процессорных ядер, — вот что влечет за собой параллельные вычисления.

Модели параллельного программирования

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

Давайте пока предположим, что распараллеливание — лучший вариант для вас. В параллельных вычислениях есть в основном три модели:

Нет необходимости в обмене данными между заданиями, и каждое из них может выполняться независимо.

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

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

В этой статье будет продемонстрирована первая модель, которая является и самой простой.

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

Модуль многопроцессорности Python — это один из инструментов для реализации параллелизма. Вы можете настроить несколько процессов, каждый из которых имеет свой собственный интерпретатор Python, используя модуль multiprocessing. По этой причине многопроцессорность Python обеспечивает параллелизм на основе процессов.

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

Мы рассмотрим преимущества использования многопроцессорной обработки в следующем разделе.

Преимущества многопроцессорности

  • Вот несколько преимуществ многопроцессорной обработки:
  • Лучшее использование ЦП при выполнении операций с интенсивным использованием ЦП.
  • большая власть над ребенком по сравнению с потоками
  • просто кодировать

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

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

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

Объединение

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

Затем мы создаем экземпляр класса Pool без указания каких-либо атрибутов. Класс пула автоматически создает один процесс для каждого ядра ЦП. Затем вызывается метод карты с несколькими входными данными.

Тот факт, что расчеты в списке выполняются одновременно, является большим преимуществом!

Максимальное использование многопроцессорности Python

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

Заключение

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

Сначала были кратко объяснены основные модели использования параллельных вычислений. Затем мы начали обсуждать преимущества многопроцессорной обработки. В итоге мы обнаружили, что распараллеливание вычислений — не всегда лучший вариант и что процессы, связанные с процессором, следует распараллеливать с помощью модуля multiprocessing. Как всегда, важно подумать о конкретной проблеме, с которой вы столкнулись, и взвесить преимущества и недостатки различных методов лечения.

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord . Заинтересованы в хакинге роста? Ознакомьтесь с разделом Схема.