Мултипроцесирането е популярна техника в програмирането на Python, която ви позволява да изпълнявате множество процеси едновременно, което често води до подобрения на производителността и по-ефективно използване на системните ресурси. Тази статия се потапя в използването на многопроцесорна обработка библиотека в Python, като се фокусира специално върху карта функция. Функцията map ви позволява да приложите функция към всеки елемент в итерируем, като например списък, и да върнете нов списък с резултатите. Като използваме мултипроцесора, можем да паралелизираме този процес за по-голяма ефективност и мащабируемост.
В тази статия ще проучим проблема, за който многопроцесорната обработка с карта функция може да бъде отлично решение, ще обсъдим съответните библиотеки и функции, ще предоставим стъпка по стъпка обяснение на кода и ще се задълбочим в свързани теми, които се основават на гръбнака на многопроцесорната обработка и функцията map.
Мултипроцесорна карта: проблемът и решението
Проблемът, който се стремим да разрешим, е да подобрим производителността и ефективността на прилагане на функция към всеки елемент в голям итерируем елемент, като списък, кортеж или всеки друг обект, който поддържа итерация. Когато се сблъскате с такива задачи, използването на вградената функция за карта или разбиране на списък може да бъде доста бавно и неефективно.
Решението е да се използва многопроцесорната библиотека в Python, по-специално Басейн клас и неговите карта метод. С помощта на многопроцесорна функция Pool.map()., можем да разпределим изпълнението на нашата функция между множество процеси.
Стъпка по стъпка Обяснение на кода
Нека разбием кода и илюстрираме как да използваме ефективно функцията за мултипроцесорна карта:
import multiprocessing import time def square(n): time.sleep(0.5) return n * n # Create the list of numbers numbers = list(range(10)) # Initialize the multiprocessing Pool pool = multiprocessing.Pool() # Use the map function with multiple processes squared_numbers = pool.map(square, numbers) print(squared_numbers)
- Първо импортирайте многопроцесорна обработка модул, който съдържа инструментите, необходими за използване на паралелна обработка в Python.
- Създайте функция, наречена квадрат който просто заспива за половин секунда и след това връща квадрата на своя входен аргумент. Тази функция симулира изчисление, за което е необходимо разумно време.
- Генерирайте списък, наречен номера, който съдържа цели числа от 0 до 9 (включително).
- Инициализирайте a Басейн обект от мултипроцесорния модул. Обектът Pool служи като средство за управление на работните процеси, които ще използвате за паралелизиране на вашите задачи.
- Обадете се на карта метод на обекта на пула и предайте в квадрат функция и номера списък. След това методът на картата прилага квадратната функция към всеки елемент в списъка с числа едновременно, като използва наличните работни процеси в пула.
- Отпечатайте получения списък с квадратни_числа, който трябва да съдържа квадратните стойности от списъка с числа.
Многопроцесорна библиотека на Python
Питонът многопроцесорна обработка библиотеката предоставя интуитивно средство за прилагане на паралелизъм във вашата програма. Той маскира част от сложността, обикновено свързана с паралелното програмиране, като предлага абстракции на високо ниво като Басейн. Класът Pool опростява разпределението на работата между множество процеси, позволявайки на потребителя да изпита предимствата на паралелната обработка с минимални проблеми.
Модул Python Itertools и свързани функции
Въпреки че мултипроцесирането е отлично решение за много паралелни задачи, струва си да се спомене, че Python предоставя и други библиотеки и инструменти, които отговарят на подобни нужди. Модулът itertools, например, предлага изобилие от функции, които работят с итерируеми елементи, често с подобрена ефективност. Някои itertools функционират като imap() намлява imap_unordered() може да паралелизира процеса на прилагане на функция към итерируем. Въпреки това е важно да се отбележи, че itertools се фокусира предимно върху базирани на итератор решения, докато библиотеката за многопроцесорна обработка предлага по-всеобхватен подход към паралелизма, предоставяйки допълнителни инструменти и възможности извън функциите, подобни на карта.