Erfahren Sie mehr über Python Multiprocessing (aus einem PMOTW-Artikel ) und würden Sie gerne klarstellen, was genau die join()
Methode tut.
In einem alten Tutorial aus dem Jahr 2008 heißt es, dass ohne den p.join()
Aufruf im folgenden Code "der untergeordnete Prozess im Leerlauf bleibt und nicht beendet wird und zu einem Zombie wird, den Sie manuell töten müssen".
from multiprocessing import Process
def say_hello(name='world'):
print "Hello, %s" % name
p = Process(target=say_hello)
p.start()
p.join()
Ich habe einen Ausdruck von PID
sowie einen time.sleep
zu testenden hinzugefügt und soweit ich das beurteilen kann, endet der Prozess von selbst:
from multiprocessing import Process
import sys
import time
def say_hello(name='world'):
print "Hello, %s" % name
print 'Starting:', p.name, p.pid
sys.stdout.flush()
print 'Exiting :', p.name, p.pid
sys.stdout.flush()
time.sleep(20)
p = Process(target=say_hello)
p.start()
# no p.join()
innerhalb von 20 Sekunden:
936 ttys000 0:00.05 /Library/Frameworks/Python.framework/Versions/2.7/Reso
938 ttys000 0:00.00 /Library/Frameworks/Python.framework/Versions/2.7/Reso
947 ttys001 0:00.13 -bash
nach 20 Sekunden:
947 ttys001 0:00.13 -bash
Das Verhalten ist dasselbe, p.join()
wenn am Ende der Datei wieder hinzugefügt wird. Das Python-Modul der Woche bietet eine gut lesbare Erklärung des Moduls . "Um zu warten, bis ein Prozess seine Arbeit abgeschlossen und beendet hat, verwenden Sie die join () -Methode.", Aber es scheint, dass zumindest OS X dies trotzdem getan hat.
Ich wundere mich auch über den Namen der Methode. .join()
Verkettet die Methode hier etwas? Verkettet es einen Prozess mit seinem Ende? Oder teilt es nur einen Namen mit Pythons nativer .join()
Methode?
CPU, Memory resources
vom übergeordneten Prozess getrennt join
und nach Abschluss des untergeordneten Prozesses wieder zurückgesetzt?