[codice preso dal programmazione Python 4a edizione di Mark Lutz]Qualcuno potrebbe spiegare il seguente esempio di os.fork()?
"forks child processes until you type 'q'"
import os
def child():
print('Hello from child', os.getpid())
os._exit(0) # else goes back to parent loop
def parent():
while True:
newpid = os.fork()
if newpid == 0:
child()
else:
print('Hello from parent', os.getpid(), newpid)
if input() == 'q': break
parent()
Quali le uscite codice quando correva:
Hello from parent 2057 2062
Hello from child 2062
Hello from parent 2057 2068
Hello from child 2068
Hello from parent 2057 2069
Hello from child 2069
Hello from parent 2057 2070
Hello from child 2070
q
Le cose che mi capiscono:
os.fork()
viene utilizzato per avviare un altro processo in parallelo a quello attuale.os.fork()
crea una copia della precedente sessione Python e la apre in parallelo.os.fork()
restituisce l'id del nuovo processo.
Le cose che non capisco:
- Come mai il valore di
os.getpid()
non è mai cambiato quando il codice viene eseguito? - Perché viene mai chiamata la funzione
child()
? Diciamo che il valore dinewpid
! = 0, quindi il programma verrà stampatoprint('Hello from parent', os.getpid(), newpid)
. Tuttavia, dopo di ciò, stampa la riga dal bambino piuttosto che chiedere un input poiché il caso è dopo l'istruzione if. - Che cosa fa
os._exit(0)
?
Grazie mille per il vostro tempo. :)
Quindi, la riga 'newpid = os.fork()' non viene eseguita sullo stesso processo ('parent()')? –
Aggiornato la mia risposta - sì os.fork viene eseguito sullo stesso processo del genitore. –
Ok, quindi ho preso la parte bambino, tuttavia, la mia domanda rimane la stessa: 'newpid = os.fork()' viene eseguito sullo stesso processo di 'os.fork()' di 'print ('Hello from parent ', os.getpid(), newpid) '. Allora, perché 'newpid' mostra valori diversi? –