Višeprocesiranje je popularna tehnika u Python programiranju koja vam omogućava da istovremeno pokrenete više procesa, što često rezultira poboljšanjem performansi i efikasnijim korištenjem sistemskih resursa. Ovaj članak se bavi upotrebom multiprocesiranje biblioteci u Python-u, s posebnim fokusom na karta funkcija. Funkcija map omogućava vam da primenite funkciju na svaku stavku u iterable, kao što je lista, i vratite novu listu sa rezultatima. Koristeći višeprocesiranje, možemo paralelizirati ovaj proces za veću efikasnost i skalabilnost.
U ovom članku ćemo istražiti problem za koji multiprocesiranje s funkcijom mape može biti odlično rješenje, raspravljati o relevantnim bibliotekama i funkcijama, dati postupno objašnjenje koda i ući u srodne teme koje se temelje na okosnici multiprocesiranja i funkcije mape.
Višeprocesna karta: problem i rješenje
Problem koji želimo riješiti je poboljšanje performansi i efikasnosti primjene funkcije na svaku stavku u velikom iterableu, kao što je lista, tuple ili bilo koji drugi objekat koji podržava iteraciju. Kada se suočite s takvim zadacima, korištenje ugrađene funkcije mape ili razumijevanja liste može biti prilično sporo i neefikasno.
Rješenje je korištenje višeprocesne biblioteke u Pythonu, konkretno, the bazen klasa i njena karta metoda. Korišćenjem višeprocesna funkcija Pool.map()., možemo distribuirati izvršenje naše funkcije na više procesa.
Korak po korak objašnjenje koda
Hajde da razložimo kod i ilustriramo kako efikasno koristiti funkciju višeprocesne mape:
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)
- Prvo uvezite multiprocesiranje modul, koji sadrži alate potrebne za korištenje paralelne obrade u Pythonu.
- Kreirajte funkciju pod nazivom trg koji jednostavno spava na pola sekunde, a zatim vraća kvadrat svog ulaznog argumenta. Ova funkcija simulira proračun za koji je potrebno razumno vrijeme da se završi.
- Generirajte listu tzv brojevi, koji sadrži cijele brojeve od 0 do 9 (uključivo).
- Inicijalizirajte a bazen objekt iz višeprocesnog modula. Objekt Pool služi kao sredstvo za upravljanje radničkim procesima koje ćete koristiti za paralelizaciju zadataka.
- Nazovite karta metodu na objektu bazena i proslijediti u trg funkcija i brojevi lista. Metoda mape tada primjenjuje funkciju kvadrata na svaku stavku na listi brojeva istovremeno, koristeći dostupne radne procese u grupi.
- Odštampajte rezultujuću listu kvadratnih_brojeva, koja treba da sadrži kvadratne vrednosti sa liste brojeva.
Python višeprocesna biblioteka
Python multiprocesiranje biblioteka pruža intuitivno sredstvo za implementaciju paralelizma u vaš program. On maskira dio složenosti koji se obično povezuje s paralelnim programiranjem nudeći apstrakcije na visokom nivou kao što su bazen. Klasa Pool pojednostavljuje distribuciju posla u više procesa, omogućavajući korisniku da iskusi prednosti paralelne obrade uz minimalne probleme.
Python Itertools modul i srodne funkcije
Iako je multiprocesiranje odlično rješenje za mnoge paralelne zadatke, vrijedno je spomenuti da Python također nudi druge biblioteke i alate koji zadovoljavaju slične potrebe. Modul itertools, na primjer, nudi mnoštvo funkcija koje rade na iterable, često s poboljšanom efikasnošću. Neki itertools funkcioniraju kao imap() i imap_unordered() može paralelizirati proces primjene funkcije na iterable. Međutim, važno je napomenuti da se itertools prvenstveno fokusira na rješenja zasnovana na iteratorima, dok biblioteka za više procesa nudi sveobuhvatniji pristup paralelizmu, pružajući dodatne alate i mogućnosti izvan funkcija sličnih mapama.