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.
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.
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))
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.
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_squareså att den tar två argument: heltalet som ska kvadreras och listanresults. - I
compute_square, beräkna kvadraten av heltalet och lägg till det i listanresults. - För varje tal i
numbers, skapa enProcesssom riktar motcompute_squaremed talet ochresultssom 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
Tack för dina kommentarer!
single
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal