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.
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.
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))
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.
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_squareslik at den tar to argumenter: heltallet som skal kvadreres ogresults-listen. - I
compute_square, beregn kvadratet av heltallet og legg det til iresults-listen. - For hvert tall i
numbers, opprett enProcesssom peker tilcompute_squaremed tallet ogresultssom 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
Takk for tilbakemeldingene dine!
single
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår