Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Utfordring: Den Parallelle Kvadratsamleren | Multithreading vs. Multiprocessing
Python Strukturert Programmering
Seksjon 3. Kapittel 5
single

single

Utfordring: Den Parallelle Kvadratsamleren

Sveip for å vise menyen

Multiprosessering i Python gjør det mulig å kjøre flere prosesser parallelt, hver med sin egen Python-tolk og minneområde. Denne tilnærmingen er spesielt nyttig for CPU-krevende oppgaver, hvor du ønsker å utnytte flere CPU-kjerner for å utføre beregninger raskere. Ved å bruke multiprosessering kan du forbedre ytelsen betydelig for operasjoner som krever tung beregning, som databehandling, vitenskapelige kalkulasjoner eller simuleringer.

Note
Merk

Klassen multiprocessing.Manager gir en måte å opprette delte objekter – som lister og ordbøker – som trygt kan nås og endres av flere prosesser. Når du trenger å samle resultater eller koordinere data mellom separate Process-instanser, bør du alltid bruke en Manager for å opprette disse delte objektene. Vanlige Python-lister og ordbøker deles ikke mellom prosesser, så endringer gjort i én prosess vil ikke være synlige for andre. Med en Manager-liste kan hver prosess legge til eller endre data, og alle endringer vil være synlige for hver prosess som bruker det delte objektet.

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))

Denne koden viser hvordan man bruker multiprocessing.Manager for å opprette en delt liste som flere prosesser kan få tilgang til og endre. Hver prosess beregner kvadratet av et tall og legger resultatet sitt til den delte listen. Ved å bruke en Manager-liste sikrer du at alle prosesser trygt kan dele og samle data, noe som gjør det mulig å hente resultater fra separate prosesser som kjører parallelt.

Oppgave

Sveip for å begynne å kode

Skriv en funksjon kalt compute_square som tar et enkelt heltall og en results-liste som argumenter, beregner kvadratet av heltallet, og legger resultatet til i results-listen.

Bruk deretter multiprocessing.Process-klassen til å opprette en egen prosess for hvert tall i numbers-listen for å beregne kvadratet parallelt. Samle resultatene fra alle prosessene og lagre dem i variabelen results.

  • Implementer funksjonen compute_square slik at den tar to argumenter: heltallet som skal kvadreres og results-listen.
  • I compute_square, beregn kvadratet av heltallet og legg det til i results-listen.
  • For hvert tall i numbers, opprett en Process som peker til compute_square med tallet og results som argumenter.
  • Start alle prosessene, og bruk deretter join for å sikre at alle beregningene er fullført før du sjekker resultatene.
  • Lagre alle beregnede kvadrater i results-listen.

Løsning

Switch to desktopBytt til skrivebordet for virkelighetspraksisFortsett der du er med et av alternativene nedenfor
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 5
single

single

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

some-alt