single
Haaste: Rinnakkaisten Neliöiden Kerääjä
Pyyhkäise näyttääksesi valikon
Multiprosessointi Pythonissa mahdollistaa useiden prosessien ajamisen rinnakkain, jokaisella omat Python-tulkki ja muistialue. Tämä lähestymistapa on erityisen hyödyllinen prosessorisidonnaisissa tehtävissä, joissa halutaan hyödyntää useita suorittimia laskentatehon nopeuttamiseksi. Multiprosessoinnin avulla suorituskyky paranee merkittävästi tehtävissä, jotka vaativat raskasta laskentaa, kuten tietojenkäsittely, tieteelliset laskelmat tai simulaatiot.
multiprocessing.Manager-luokka tarjoaa tavan luoda jaettuja olioita – kuten listoja ja sanakirjoja – joita useat prosessit voivat käyttää ja muokata turvallisesti. Kun tuloksia täytyy kerätä tai tietoja koordinoida eri Process-instanssien välillä, käytä aina Manager-oliota näiden jaettujen olioiden luomiseen. Tavalliset Python-listat ja -sanakirjat eivät ole jaettuja prosessien välillä, joten yhdessä prosessissa tehdyt muutokset eivät näy muille. Manager-listan avulla jokainen prosessi voi lisätä tai muokata tietoja, ja kaikki muutokset näkyvät kaikille prosesseille, jotka käyttävät kyseistä jaettua oliota.
1234567891011121314151617181920from multiprocessing import Process, Manager def add_value(value, shared_list): shared_list.append(value) if __name__ == "__main__": manager = Manager() shared_list = manager.list() processes = [] values = [10, 20, 30, 40, 50] for v in values: p = Process(target=add_value, args=(v, shared_list)) processes.append(p) p.start() for p in processes: p.join() print("Collected results:", list(shared_list))
Tämä koodi havainnollistaa, kuinka multiprocessing.Manager-luokkaa käytetään jaetun listan luomiseen, jota useat prosessit voivat käyttää ja muokata. Jokainen prosessi laskee luvun neliön ja lisää tuloksensa jaettuun listaan. Käyttämällä Manager-listaa varmistetaan, että kaikki prosessit voivat turvallisesti jakaa ja kerätä tietoa, mikä mahdollistaa tulosten keräämisen rinnakkain suoritettavista prosesseista.
Pyyhkäise aloittaaksesi koodauksen
Kirjoita funktio nimeltä compute_square, joka ottaa argumentteina yhden kokonaisluvun ja results-listan, laskee luvun neliön ja lisää tuloksen results-listaan.
Käytä sitten multiprocessing.Process-luokkaa luodaksesi erillinen prosessi jokaiselle numbers-listan luvulle neliön laskemista varten rinnakkain. Kerää kaikkien prosessien tulokset ja tallenna ne results-muuttujaan.
- Toteuta
compute_square-funktio ottamaan kaksi argumenttia: neliöitävä kokonaisluku jaresults-lista. - Laske
compute_square-funktiossa luvun neliö ja lisää seresults-listaan. - Luo jokaista
numbers-listan lukua vartenProcess, jonka kohteena oncompute_squareja argumentteina kyseinen luku sekäresults. - Käynnistä kaikki prosessit ja liitä ne (join), jotta kaikki laskut valmistuvat ennen tulosten tarkistamista.
- Tallenna kaikki lasketut neliöt
results-listaan.
Ratkaisu
Kiitos palautteestasi!
single
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme