Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Sfida: Il Collezionista Parallelo di Quadrati | Multithreading vs. Multiprocessing
Programmazione Strutturale in Python
Sezione 3. Capitolo 5
single

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.

Note
Nota

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.

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

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.

Compito

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_square in modo che accetti due argomenti: l'intero da elevare al quadrato e la lista results.
  • All'interno di compute_square, calcolare il quadrato e aggiungerlo alla lista results.
  • Per ogni elemento in numbers, istanziare un oggetto Process con target compute_square e argomenti il numero e la lista results.
  • Avviare tutti i processi e attendere il completamento di ciascuno, quindi verificare il contenuto della lista results.

Soluzione

Switch to desktopCambia al desktop per esercitarti nel mondo realeContinua da dove ti trovi utilizzando una delle opzioni seguenti
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 5
single

single

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

some-alt