[Code aus der Programmierung von Python 4th Edition von Mark Lutz]
%Vor%Was der Code beim Ausführen ausgibt:
%Vor%Dinge, die ich verstehe:
os.fork()
wird verwendet, um einen anderen Prozess parallel zum aktuellen zu starten. os.fork()
erstellt eine Kopie der vorherigen Python-Sitzung und öffnet sie parallel. os.fork()
gibt die ID des neuen Prozesses zurück. Dinge, die ich nicht verstehe:
os.getpid()
niemals geändert wird, wenn der Code ausgeführt wird? child()
-Funktion jemals aufgerufen? Nehmen wir an, dass der Wert von newpid
! = 0 ist, dann druckt das Programm print('Hello from parent', os.getpid(), newpid)
aus. Danach druckt es jedoch die Zeile von child, anstatt nach einer Eingabe zu fragen, wie es nach der if-Anweisung der Fall ist. os._exit(0)
? Vielen Dank für Ihre Zeit. :)
1: Wie wird der Wert von os.getpid () nie geändert, wenn der Code ausgeführt wird?
Der Wert von os.getpid()
ändert sich nie für den Elternteil, da dies immer derselbe Prozess ist. Die PID wird jedes Mal für das Kind geändert, da fork()
immer einen brandneuen Kindprozess-Klon mit seiner eigenen PID erstellt.
2: Warum wird die Funktion child () jemals aufgerufen? Nehmen wir an, dass der Wert von newpid! = 0 ist, dann druckt das Programm print ('Hallo von Eltern', os.getpid (), newpid). Danach druckt es jedoch die Zeile von child, anstatt nach einer Eingabe zu fragen, wie es nach der if-Anweisung der Fall ist.
Der untergeordnete Prozess wird aufgerufen, weil jetzt zwei Prozesse ausgeführt werden. Einer nannte die Funktion child()
, der andere die Funktion print
. Sie kämpfen einfach dafür, auf dem Bildschirm zu drucken, und in diesem Fall haben Sie zuerst gesehen, dass der übergeordnete Ausdruck "win" lautet.
3: Was macht os._exit (0)?
Siehe hier: Ссылка
Beenden Sie den Prozess mit dem Status n, ohne Bereinigungshandler aufzurufen, STDIO-Puffer zu leeren usw..
while True:
). os.fork
! Und die Funktion gibt die PID des Kindes an den Eltern zurück. Daher führt der Elternteil den zweiten Teil der if else
-Anweisung aus, während alle Kinder den ersten Teil ausführen, weil os.fork
für untergeordnete Prozesse eine 0 zurückgibt. os._exit
ist im Wesentlichen eine abgespeckte Version von os.exit()
und ist für untergeordnete Prozesse gedacht. Tags und Links python parallel-processing