Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Udfordring: Den Parallelle Kvadratsamler | Multithreading vs. Multiprocessing
Python Strukturel Programmering
Sektion 3. Kapitel 5
single

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.

Note
Bemærk

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.

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

Opgave

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, og results-listen.
  • I compute_square beregnes kvadratet af heltallet, og resultatet tilføjes til results-listen.
  • For hvert tal i numbers oprettes en Process, der har compute_square som mål, med tallet og results som 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

Switch to desktopSkift til skrivebord for at øve i den virkelige verdenFortsæt der, hvor du er, med en af nedenstående muligheder
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 5
single

single

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

some-alt