single
Udfordring: Den Parallelle Kvadratsamler
Stryg for at vise menuen
Multiprocessing i Python gør det muligt at køre flere processer parallelt, hver med sin egen Python-fortolker og hukommelsesområde. Denne tilgang er især nyttig til CPU-tunge opgaver, hvor man ønsker at udnytte flere CPU-kerner for at udføre beregninger hurtigere. Ved at bruge multiprocessing kan du markant forbedre ydeevnen for operationer, der kræver tung beregning, såsom databehandling, videnskabelige beregninger eller simuleringer.
Klassen multiprocessing.Manager giver mulighed for at oprette delte objekter – såsom lister og ordbøger – der sikkert kan tilgås og ændres af flere processer. Når du har behov for at indsamle resultater eller koordinere data mellem separate Process-instanser, skal du altid bruge en Manager til at oprette disse delte objekter. Almindelige Python-lister og -ordbøger deles ikke mellem processer, så ændringer foretaget i én proces vil ikke være synlige for andre. Med en Manager-liste kan hver proces tilføje eller ændre data, og alle ændringer vil være synlige for enhver proces, der bruger det delte objekt.
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 kode demonstrerer, hvordan man bruger multiprocessing.Manager til at oprette en delt liste, som flere processer kan få adgang til og ændre. Hver proces beregner kvadratet af et tal og føjer resultatet til den delte liste. Ved at bruge en Manager-liste sikres det, at alle processer sikkert kan dele og indsamle data, hvilket gør det muligt at samle resultater fra separate processer, der kører parallelt.
Swipe to start coding
Skriv en funktion kaldet compute_square, der tager et enkelt heltal og en results-liste som argumenter, beregner kvadratet af heltallet og tilføjer resultatet til results-listen.
Brug derefter klassen multiprocessing.Process til at oprette en separat proces for hvert tal i numbers-listen, så kvadratet af hvert tal beregnes parallelt. Indsaml resultaterne fra alle processer og gem dem i variablen results.
- Implementér funktionen
compute_square, så den tager to argumenter: heltallet, der skal kvadreres, ogresults-listen. - I
compute_squareberegnes kvadratet af heltallet, og resultatet tilføjes tilresults-listen. - For hvert tal i
numbersoprettes enProcess, der harcompute_squaresom mål, med tallet ogresultssom argumenter. - Start alle processer, og brug derefter join for at sikre, at alle beregninger er færdige, før resultaterne kontrolleres.
- Gem alle beregnede kvadrater i
results-listen.
Løsning
Tak for dine kommentarer!
single
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat