Mikä on Python-moniprosessointi ja miten sitä käytetään?
Pythonin moniprosessointi mahdollistaa työmäärän jakamisen useiden prosessien kesken, mikä lyhentää kokonaiskestoa. Tämä on erityisen hyödyllistä suurten laskelmien suorittamisessa tai suurten tietojoukkojen käsittelyssä.
Mitä on Python-moniprosessointi?
Pythonin moniprosessointi tarkoittaa useiden prosessien samanaikaista suorittamista, jolloin voit hyödyntää moniydinsysteemien etuja. Toisin kuin yksisäikeiset menetelmät, jotka käsittelevät tehtäviä yksi kerrallaan, moniprosessointi mahdollistaa ohjelman eri osien rinnakkaisen suorittamisen, kukin omalla prosessorilla. Jokainen prosessi saa oman muistialueensa ja voi suorittaa erillisillä prosessorin ytimillä, mikä lyhentää huomattavasti raskaiden tai aikakriittisten toimintojen suoritusaikaa.
Pythonin moniprosessointi on monipuolinen sovellus. Moniprosessointia käytetään usein tietojenkäsittelyssä ja analysoinnissa suurten tietojoukkojen nopeampaan käsittelyyn ja monimutkaisten analyysien nopeuttamiseen. Moniprosessointia voidaan käyttää myös simuloinneissa ja mallinnuslaskelmissa (esim. tieteellisissä sovelluksissa) monimutkaisten laskelmien suoritusaikojen lyhentämiseksi. Sen lisäksi, että se tehostaa verkkosivujen kaappausta hakemalla dataa useilta sivustoilta samanaikaisesti, se myös parantaa tehokkuutta kuvankäsittelyssä ja tietokoneen näkökyvyssä, mikä nopeuttaa kuvien analysointia.
Pythonin moniprosessoinnin toteuttaminen
Python tarjoaa useita vaihtoehtoja moniprosessoinnin toteuttamiseen. Seuraavissa osioissa esittelemme kolme yleistä työkalua: multiprocessing, concurrent.futures ja joblib paketin.
multiprocessing moduuli
multiprocessing on Python-moniprosessoinnin vakiomoduuli. Tämän moduulin avulla voit luoda prosesseja, jakaa tietoja niiden välillä ja synkronoida niitä lukkojen, jonojen ja muiden työkalujen avulla.
import multiprocessing
def task(n):
result = n * n
print(f"Result: {result}")
if __name__ == "__main__":
processes = []
for i in range(1, 6):
process = multiprocessing.Process(target=task, args=(i,))
processes.append(process)
process.start()
for process in processes:
process.join()pythonYllä olevassa esimerkissä käytämme luokkaa multiprocessing.Process prosessien luomiseen ja suorittamiseen, jotka suorittavat toiminnon task(), joka laskee annetun luvun neliön. Prosessien alustamisen jälkeen odotamme niiden valmistumista ennen kuin jatkamme pääohjelman suorittamista. Tulos näytetään f-merkkijonolla, joka on Python-merkkijonomuotoilumenetelmä, joka sisältää lausekkeita. On syytä huomata, että tulostuksen järjestys on satunnainen ja ei-deterministinen. Voit myös luoda prosessipoolin Python multiprocessing:llä:
import multiprocessing
def task(n):
return n * n
if __name__ == "__main__":
with multiprocessing.Pool() as pool:
results = pool.map(task, range(1, 6))
print(results) # Output: [1, 4, 9, 16, 25]pythonpool.map() lla funktio task() sovelletaan datajonoon, ja tulokset kerätään ja tulostetaan.
concurrent.futures kirjasto
Tämä moduuli tarjoaa korkean tason rajapinnan prosessien asynkroniseen suorittamiseen ja rinnakkaiseen käsittelyyn. Se käyttää Pool Executor -ohjelmaa tehtävien suorittamiseen prosessi- tai säikeistöjoukossa. concurrent.futures on yksinkertaisempi tapa käsitellä asynkronisia tehtäviä, ja se on monissa tapauksissa helpompi käyttää kuin Python multiprocessing.
import concurrent.futures
def task(n):
return n * n
with concurrent.futures.ProcessPoolExecutor() as executor:
futures = [executor.submit(task, i) for i in range(1, 6)]
for future in concurrent.futures.as_completed(futures):
print(future.result()) # result in random orderpythonKoodi käyttää concurrent.futures module tehtävien rinnakkaiseen käsittelyyn ProcessPoolExecutor kanssa. Funktio task(n) välitetään numeroille 1–5. Menetelmä as_completed() odottaa tehtävien valmistumista ja tulostaa tulokset missä tahansa järjestyksessä.
joblib paketti
joblib on ulkoinen Python-kirjasto, joka on suunniteltu yksinkertaistamaan rinnakkaisprosessointia Pythonissa, esimerkiksi toistettavissa tehtävissä, kuten eri syöttöparametreilla toimivien funktioiden suorittamisessa tai suurten tietomäärien käsittelyssä. joblib n päätoiminnot ovat tehtävien rinnakkaistaminen, funktioiden tulosten välimuistiin tallentaminen sekä muistin ja laskentaresurssien optimointi.
from joblib import Parallel, delayed
def task(n):
return n * n
results = Parallel(n_jobs=4)(delayed(task)(i) for i in range(1, 11))
print(results) # Output: Results of the function for numbers from 1 to 10pythonIlmaisu Parallel(n_jobs=4)(delayed(task)(i) for i in range(1, 11)) käynnistää funktion task() rinnakkaisen suorituksen numeroille 1–10. Parallel on konfiguroitu n_jobs=4 kanssa, mikä tarkoittaa, että voidaan käsitellä enintään neljä rinnakkaista tehtävää. Kutsumalla delayed(task)(i) luodaan tehtävä, joka suoritetaan rinnakkain jokaiselle numerolle i alueella 1–10. Tämä tarkoittaa, että funktiota task() kutsutaan samanaikaisesti jokaiselle näistä numeroista. Tulokset numeroille 1–10 tallennetaan results:een ja tulostetaan. 630ef2b8ef2f762ab06e12069453e656