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.
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.
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))
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.
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_squarezodat deze twee argumenten accepteert: het te kwadrateren getal en deresults-lijst. - Bereken in
compute_squarehet kwadraat van het getal en voeg dit toe aan deresults-lijst. - Maak voor elk getal in
numberseenProcessaan diecompute_squareaanroept met het getal enresultsals 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
Bedankt voor je feedback!
single
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.