Řešeno: multiprocessingová mapa

Poslední aktualizace: 09/11/2023

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)
  1. Nejprve importujte multiprocessing modul, který obsahuje nástroje nezbytné pro využití paralelního zpracování v Pythonu.
  2. 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.
  3. Vytvořte seznam tzv Čísla, která obsahuje celá čísla od 0 do 9 (včetně).
  4. 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.
  5. 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.
  6. 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.

Související příspěvky: