Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Challenge: Den Parallella Kvadratsamlaren | Multithreading vs. Multiprocessing
Python Strukturell Programmering
Avsnitt 3. Kapitel 5
single

single

Challenge: Den Parallella Kvadratsamlaren

Svep för att visa menyn

Multiprocessing i Python möjliggör att köra flera processer parallellt, där varje process har sin egen Python-tolk och minnesutrymme. Detta tillvägagångssätt är särskilt användbart för CPU-intensiva uppgifter, där du vill utnyttja flera CPU-kärnor för att utföra beräkningar snabbare. Genom att använda multiprocessing kan du avsevärt förbättra prestandan för operationer som kräver tung beräkning, såsom databehandling, vetenskapliga beräkningar eller simuleringar.

Note
Notering

Klassen multiprocessing.Manager tillhandahåller ett sätt att skapa delade objekt – såsom listor och ordböcker – som kan nås och ändras säkert av flera processer. När du behöver samla in resultat eller samordna data mellan separata Process-instanser, använd alltid en Manager för att skapa dessa delade objekt. Vanliga Python-listor och ordböcker delas inte mellan processer, så ändringar som görs i en process blir inte synliga för andra. Med en Manager-lista kan varje process lägga till eller ändra data, och alla ändringar blir synliga för varje process som använder det delade 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))

Den här koden visar hur man använder multiprocessing.Manager för att skapa en delad lista som flera processer kan komma åt och ändra. Varje process beräknar kvadraten av ett tal och lägger till sitt resultat i den delade listan. Genom att använda en Manager-lista säkerställs att alla processer kan dela och samla in data på ett säkert sätt, vilket gör det möjligt att samla resultat från separata processer som körs parallellt.

Uppgift

Svep för att börja koda

Skriv en funktion kallad compute_square som tar ett heltal och en results-lista som argument, beräknar kvadraten av heltalet och lägger till resultatet i results-listan.

Använd sedan klassen multiprocessing.Process för att skapa en separat process för varje tal i listan numbers för att beräkna dess kvadrat parallellt. Samla resultaten från alla processer och lagra dem i variabeln results.

  • Implementera funktionen compute_square så att den tar två argument: heltalet som ska kvadreras och listan results.
  • I compute_square, beräkna kvadraten av heltalet och lägg till det i listan results.
  • För varje tal i numbers, skapa en Process som riktar mot compute_square med talet och results som argument.
  • Starta alla processer och använd sedan join för att säkerställa att alla beräkningar är klara innan resultaten kontrolleras.
  • Spara alla beräknade kvadrater i listan results.

Lösning

Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 5
single

single

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

some-alt