Processi in Python

June 27

In informatica la terminologia della scienza, un processo è un'istanza in esecuzione di un programma nella memoria del computer. Questi processi in memoria possono anche generare altri processi. Il linguaggio di programmazione Python, tanto come altri linguaggi adatti per lo sviluppo di software per desktop, offre una libreria per facilitare la creazione e il mantenimento di processi in un sistema informatico.

Processi

Quando un utente inizia un'applicazione quale un browser Web, l'applicazione diventa un processo in esecuzione nel sistema operativo. Prima dell'esecuzione, un programma semplicemente risiede come i dati sul disco rigido. Quando viene eseguito, il sistema operativo carica il programma nella memoria principale o RAM. Tutte le applicazioni in esecuzione hanno spazio nella RAM dal sistema operativo mentre corrono. Durante l'esecuzione, il sistema operativo controlla i processi applicativi attraverso una tabella di processo che descrive lo stato del processo e dove risiede nella memoria.

Processi di deposizione delle uova

I processi possono generare altri processi destinati a svolgere un lavoro simultaneo durante l'esecuzione del programma. Questa "multiprocessing" permette ai programmi di gestire molti compiti differenti allo stesso tempo. Un programma in Python, per esempio, può generare un processo separato utilizzando la libreria "multiprocessing" e il suo oggetto "Process", come il seguente esempio:

da multiprocessing processo di importazione

os importazione

def ciao ():

stampa ( 'Ciao')

p = processo (target = ciao)

p.start () // avvia processo figlio "p"

Processi che fanno il lavoro

Un processo figlio, dato qualche compito, eseguirà questo compito, mentre il processo padre esegue il proprio compito. Nel seguente esempio, un programma Python genera un processo, e sia il processo padre e il processo figlio chiamare lo stesso metodo "os.getpid ()", che restituisce l'id numerico del processo in corso:

DEF PID ():

stampa ( 'Sono processo:', os.getpid ())

p = processo (target = PID)

p.start ()

stampa ( 'Sono processo:', os.getpid ())

p.join () // termina il processo di 'p'

L'output di questi due processi è la seguente. Si noti che il comando di genitore "stampa" con il "processo" minuscola in genere viene eseguito prima.

Sono processo: 57883

Sono processo: 57884

Condivisione dei dati tra processi

Due processi possono anche condividere dati tra di loro con un oggetto "tubo" che crea una connessione tra i due processi. L'utilizzo di questi oggetti di connessione, un processo figlio può inviare dati a un processo padre, che consente il processo padre di manipolare o stampare i dati salvati. L'esempio seguente mostra l'utilizzo dell'oggetto del tubo:

def inviare (bambino):

child.send ([1, 2, 3]) // il processo figlio invia i dati durante l'esecuzione

child.close ()

se il nome == 'main':

parent, child = Pipe()

p = processo (target = f, args = (bambino,))

p.start ()

parent.recv print () // processo padre riceve i dati da bambino

p.join