Multiprocessing je populární technika v programování v Pythonu, která umožňuje spouštět více procesů současně, což často vede ke zlepšení výkonu a efektivnějšímu využití systémových zdrojů. Tento článek se ponoří do použití knihovny pro multiprocessing v Pythonu, konkrétně se zaměřuje na funkci map . Funkce map umožňuje aplikovat funkci na každou položku v iterovatelném objektu, například na seznam, a vrátit nový seznam s výsledky. Využitím multiprocessingu můžeme tento proces paralelizovat pro větší efektivitu a škálovatelnost.
V tomto článku prozkoumáme problém, pro který může být multiprocesing s mapovou funkcí vynikajícím řešením, probereme příslušné knihovny a funkce, poskytneme podrobné vysvětlení kódu a ponoříme se do souvisejících témat, která staví na páteři multiprocessingu a mapové funkce.
Multiprocessingová mapa: Problém a řešení
Problém, který se snažíme vyřešit, je zlepšit výkon a efektivitu aplikace funkce na každou položku ve velké iteraci, jako je seznam, n-tice nebo jakýkoli jiný objekt, který podporuje iteraci. Když čelíte takovým úkolům, může být používání vestavěné mapové funkce nebo porozumění seznamu poměrně pomalé a neefektivní.
Řešením je využití multiprocesní knihovny v Pythonu, konkrétně třídy Pool a její metody map . Použitím multiprocesní funkce Pool.map() můžeme rozdělit provádění naší funkce mezi více procesů.
Vysvětlení kódu krok za krokem
Pojďme si kód rozebrat a ukázat, jak efektivně používat funkci multiprocessing 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)
- Nejprve importujte multiprocessing modul, který obsahuje nástroje nezbytné pro využití paralelního zpracování v Pythonu.
- Vytvořte funkci s názvem náměstí který jednoduše usne na půl sekundy a pak vrátí druhou mocninu svého vstupního argumentu. Tato funkce simuluje výpočet, jehož dokončení trvá přiměřeně dlouho.
- Vytvořte seznam tzv Čísla, která obsahuje celá čísla od 0 do 9 (včetně).
- Inicializovat a Bazén objekt z modulu multiprocessingu. Objekt Pool slouží jako prostředek ke správě pracovních procesů, které budete používat k paralelizaci vašich úloh.
- Zavolejte mapa metodu na objekt bazénu a předejte jej náměstí funkce a Čísla seznam. Metoda mapy pak použije funkci čtverce na každou položku v číselném seznamu současně pomocí dostupných pracovních procesů ve fondu.
- Vytiskněte výsledný seznam druhých_čísl, který by měl obsahovat umocněné hodnoty ze seznamu čísel.
Python Multiprocessing Library
Knihovna pro multiprocesování v Pythonu poskytuje intuitivní způsob implementace paralelismu ve vašem programu. Maskuje část složitosti typicky spojené s paralelním programováním tím, že nabízí abstrakce na vysoké úrovni, jako je Pool . Třída Pool zjednodušuje distribuci práce mezi více procesů, což uživateli umožňuje využívat výhod paralelního zpracování s minimálními obtížemi.
Modul Python Itertools a související funkce
I když je multiprocessing vynikajícím řešením pro mnoho paralelních úloh, stojí za zmínku, že Python nabízí i další knihovny a nástroje, které uspokojují podobné potřeby. Například modul itertools nabízí množství funkcí, které pracují s iterovatelnými objekty, často se zvýšenou efektivitou. Některé funkce itertools, jako je imap() a imap_unordered(), mohou paralelizovat proces aplikace funkce na iterovatelný objekt. Je však důležité poznamenat, že itertools se primárně zaměřuje na řešení založená na iterátorech, zatímco knihovna multiprocessing nabízí komplexnější přístup k paralelismu a poskytuje další nástroje a možnosti nad rámec funkcí podobných mapám.