Multiprocessing je oblíbená technika v programování v Pythonu, která vám 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 prostředků. Tento článek se ponoří do použití multiprocessing knihovny v Pythonu, konkrétně se zaměřením na mapa funkce. Funkce mapy vám umožňuje použít funkci na každou položku v iterovatelném postupu, jako je například 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žít multiprocessingovou knihovnu v Pythonu, konkrétně Bazén třída a její mapa metoda. Pomocí multiprocessingová funkce Pool.map()., můžeme distribuovat 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
Python multiprocessing knihovna poskytuje intuitivní prostředky pro implementaci paralelismu ve vašem programu. Maskuje některé ze složitosti typicky spojené s paralelním programováním tím, že nabízí abstrakce na vysoké úrovni, jako je např Bazén. Třída Pool zjednodušuje distribuci práce mezi více procesy a umožňuje uživateli zažít výhody paralelního zpracování s minimálními problémy.
Modul Python Itertools a související funkce
Zatímco multiprocessing je vynikajícím řešením pro mnoho paralelních úloh, stojí za zmínku, že Python poskytuje také další knihovny a nástroje, které vyhovují podobným potřebám. Například modul itertools nabízí množství funkcí, které fungují na iterovatelných, často s vylepšenou účinností. Některé funkce itertools jako imap() si imap_uordered() může paralelizovat proces aplikace funkce na iterovatelný. 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 pro více zpracování nabízí komplexnější přístup k paralelismu a poskytuje další nástroje a možnosti nad rámec funkcí podobných map.