Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Lavorare con i processi | Multithreading vs. Multiprocessing
Programmazione Strutturale in Python

Lavorare con i processi

Scorri per mostrare il menu

Il modulo multiprocessing di Python consente di ottenere una vera parallelizzazione avviando processi separati, ciascuno con il proprio interprete Python e spazio di memoria. A differenza dei thread, che condividono la memoria e vengono eseguiti nello stesso processo, i processi sono completamente isolati l'uno dall'altro. Questo isolamento evita la limitazione del Global Interpreter Lock (GIL), permettendo a più core della CPU di lavorare in parallelo su attività che richiedono molte risorse di calcolo. Dopo aver visto il video sopra, dovresti comprendere che la parallelizzazione basata sui processi è particolarmente utile quando è necessario eseguire calcoli intensivi o sfruttare più core per attività che altrimenti sarebbero rallentate dal GIL. Il modulo multiprocessing offre un'API familiare simile a quella del modulo threading, facilitando il passaggio tra threading e processing a seconda delle esigenze.

Utilizzo di queste classi e funzioni per costruire applicazioni parallele robuste, gestire la condivisione dei dati e coordinare l'esecuzione dei processi in Python.

123456789101112131415
import multiprocessing import time def print_message(message, delay): time.sleep(delay) print(message) process1 = multiprocessing.Process(target=print_message, args=("Process 1 finished", 2)) process2 = multiprocessing.Process(target=print_message, args=("Process 2 finished", 1)) process1.start() process2.start() process1.join() process2.join()

Questo esempio di codice dimostra come utilizzare il modulo multiprocessing di Python per eseguire attività in parallelo creando processi separati. L'esempio utilizza semplici ritardi temporali e stampa messaggi per mostrare come i processi possano essere eseguiti in modo indipendente e simultaneo.

Concetti chiave illustrati

  • Creazione dei processi:

    • Si creano nuovi processi utilizzando la classe multiprocessing.Process;
    • A ciascun processo viene assegnata una funzione di destinazione (print_message) e gli argomenti da passare a tale funzione.
  • Avvio dei processi:

    • Il metodo start() avvia ciascun processo, consentendo loro di essere eseguiti contemporaneamente;
    • Una volta avviato, ogni processo esegue la propria funzione di destinazione in modo indipendente dagli altri.
  • Esecuzione parallela:

    • Entrambi i processi attendono per durate diverse (2 e 1 secondi) utilizzando time.sleep();
    • Poiché vengono eseguiti in parallelo, il processo con il ritardo più breve termina per primo, anche se è stato avviato dopo l'altro.
  • Join dei processi:

    • Il metodo join() garantisce che il programma principale attenda la fine di entrambi i processi prima di proseguire;
    • Senza join(), il programma principale potrebbe terminare prima che i processi abbiano completato l'esecuzione.

Questo esempio mostra che con il multiprocessing, le attività possono essere eseguite contemporaneamente su più core della CPU, rendendolo ideale per operazioni CPU-bound che traggono vantaggio dall'esecuzione parallela.

question mark

Quale affermazione descrive meglio la differenza tra thread e processi in Python?

Seleziona la risposta corretta

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 4

Chieda ad AI

expand

Chieda ad AI

ChatGPT

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

Sezione 3. Capitolo 4
some-alt