single
Sfida: Il Collezionista Parallelo di Quadrati
Scorri per mostrare il menu
Il multiprocessing in Python consente di eseguire più processi in parallelo, ciascuno con il proprio interprete Python e spazio di memoria. Questo approccio è particolarmente utile per attività che richiedono molta CPU, dove si desidera sfruttare più core della CPU per eseguire calcoli più rapidamente. Utilizzando il multiprocessing, è possibile migliorare significativamente le prestazioni per operazioni che richiedono elaborazioni intensive, come l'elaborazione dei dati, i calcoli scientifici o le simulazioni.
La classe multiprocessing.Manager offre un modo per creare oggetti condivisi - come liste e dizionari - che possono essere accessibili e modificati in modo sicuro da più processi. Quando è necessario raccogliere risultati o coordinare dati tra diverse istanze di Process, utilizzare sempre un Manager per creare questi oggetti condivisi. Le normali liste e dizionari Python non sono condivisi tra i processi, quindi le modifiche apportate in un processo non saranno visibili agli altri. Con una lista gestita da Manager, ogni processo può aggiungere o modificare dati, e tutte le modifiche saranno visibili a ogni processo che utilizza quell'oggetto condiviso.
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))
Questo codice dimostra come utilizzare multiprocessing.Manager per creare una lista condivisa a cui più processi possono accedere e modificare. Ogni processo calcola il quadrato di un numero e aggiunge il risultato alla lista condivisa. Utilizzando una lista gestita da Manager, si garantisce che tutti i processi possano condividere e raccogliere dati in modo sicuro, rendendo possibile raccogliere i risultati da processi separati che vengono eseguiti in parallelo.
Scorri per iniziare a programmare
Scrivere una funzione chiamata compute_square che prenda come argomenti un singolo intero e una lista results, calcoli il quadrato dell'intero e aggiunga il risultato alla lista results.
Quindi, utilizzando la classe multiprocessing.Process, creare un processo separato per ciascun numero nella lista numbers per calcolare il quadrato in parallelo. Raccogliere i risultati di ogni processo e memorizzarli nella variabile results.
- Implementare la funzione
compute_squarein modo che accetti due argomenti: l'intero da elevare al quadrato e la listaresults. - All'interno di
compute_square, calcolare il quadrato e aggiungerlo alla listaresults. - Per ogni elemento in
numbers, istanziare un oggettoProcesscon targetcompute_squaree argomenti il numero e la listaresults. - Avviare tutti i processi e attendere il completamento di ciascuno, quindi verificare il contenuto della lista
results.
Soluzione
Grazie per i tuoi commenti!
single
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione