Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Challenge: De Parallelle Kwadraatverzamelaar | Multithreading vs. Multiprocessing
Python Structureel Programmeren
Sectie 3. Hoofdstuk 5
single

single

Challenge: De Parallelle Kwadraatverzamelaar

Veeg om het menu te tonen

Multiprocessing in Python maakt het mogelijk om meerdere processen parallel uit te voeren, elk met zijn eigen Python-interpreter en geheugengebied. Deze benadering is vooral nuttig voor CPU-intensieve taken, waarbij je meerdere CPU-kernen wilt benutten om berekeningen sneller uit te voeren. Door gebruik te maken van multiprocessing kun je de prestaties aanzienlijk verbeteren voor operaties die zware berekeningen vereisen, zoals gegevensverwerking, wetenschappelijke berekeningen of simulaties.

Note
Opmerking

De klasse multiprocessing.Manager biedt een manier om gedeelde objecten te creëren - zoals lijsten en woordenboeken - die veilig kunnen worden benaderd en aangepast door meerdere processen. Wanneer je resultaten wilt verzamelen of gegevens wilt coördineren tussen afzonderlijke Process-instanties, gebruik dan altijd een Manager om deze gedeelde objecten te maken. Gewone Python-lijsten en -woordenboeken worden niet gedeeld tussen processen, dus wijzigingen in het ene proces zijn niet zichtbaar voor andere processen. Met een Manager-lijst kan elk proces gegevens toevoegen of aanpassen, en alle wijzigingen zijn zichtbaar voor elk proces dat dat gedeelde object gebruikt.

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

Deze code laat zien hoe je multiprocessing.Manager gebruikt om een gedeelde lijst te maken die door meerdere processen kan worden benaderd en aangepast. Elk proces berekent het kwadraat van een getal en voegt het resultaat toe aan de gedeelde lijst. Door een Manager-lijst te gebruiken, zorg je ervoor dat alle processen veilig gegevens kunnen delen en verzamelen, waardoor het mogelijk is om resultaten te verzamelen van afzonderlijke processen die parallel draaien.

Taak

Veeg om te beginnen met coderen

Schrijf een functie genaamd compute_square die een enkele integer en een results-lijst als argumenten neemt, het kwadraat van de integer berekent en het resultaat toevoegt aan de results-lijst.

Gebruik vervolgens de klasse multiprocessing.Process om voor elk getal in de numbers-lijst een apart proces te creëren dat het kwadraat parallel berekent. Verzamel de resultaten van alle processen en sla ze op in de variabele results.

  • Implementeer de functie compute_square zodat deze twee argumenten accepteert: het te kwadrateren getal en de results-lijst.
  • Bereken in compute_square het kwadraat van het getal en voeg dit toe aan de results-lijst.
  • Maak voor elk getal in numbers een Process aan die compute_square aanroept met het getal en results als argumenten.
  • Start alle processen en gebruik vervolgens join om ervoor te zorgen dat alle berekeningen zijn voltooid voordat je de resultaten controleert.
  • Sla alle berekende kwadraten op in de results-lijst.

Oplossing

Switch to desktopSchakel over naar desktop voor praktijkervaringGa verder vanaf waar je bent met een van de onderstaande opties
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 5
single

single

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

some-alt