Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Haaste: Rinnakkaisten Neliöiden Kerääjä | Multithreading vs. Multiprocessing
Pythonin Rakenteellinen Ohjelmointi
Osio 3. Luku 5
single

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.

Note
Huomio

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.

1234567891011121314151617181920
from 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.

Tehtävä

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 ja results-lista.
  • Laske compute_square-funktiossa luvun neliö ja lisää se results-listaan.
  • Luo jokaista numbers-listan lukua varten Process, jonka kohteena on compute_square ja 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

Switch to desktopVaihda työpöytään todellista harjoitusta vartenJatka siitä, missä olet käyttämällä jotakin alla olevista vaihtoehdoista
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 5
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

some-alt