Python Multiprocessing hakkında bilgi edinmek (bir PMOTW makalesinden ) ve join()yöntemin tam olarak ne yaptığına dair biraz açıklama yapmak isterim .
Bir In 2008 eski öğretici o olmadan belirtiyor p.join()aşağıdaki kodu çağrı, "çocuk süreç elle öldürmek gereken bir zombi haline sonlandırmak boşta ve olmayacaktır".
from multiprocessing import Process
def say_hello(name='world'):
print "Hello, %s" % name
p = Process(target=say_hello)
p.start()
p.join()
Testin PIDyanı sıra time.sleeptest çıktısını da ekledim ve söyleyebileceğim kadarıyla süreç kendi kendine sona eriyor:
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()
20 saniye içinde:
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
20 saniye sonra:
947 ttys001 0:00.13 -bash
Davranış, p.join()dosyanın sonuna geri eklendiğinde aynıdır . Haftanın Python Modülü , modülün çok okunabilir bir açıklamasını sunuyor ; "Bir işlemin çalışmasını tamamlayıp çıkmasını beklemek için, join () yöntemini kullanın.", Ancak en azından OS X bunu zaten yapıyor gibi görünüyor.
Yöntemin adını da merak ediyorum. Is .join()yöntem şey burada artarda? Sonu olan bir süreci birleştirmek mi? Yoksa Python'un yerel .join()yöntemiyle bir adı mı paylaşıyor ?
CPU, Memory resourcessüreç ana süreçten ayrılıyor, sonra joinalt süreç tamamlandıktan sonra tekrar geri mi alınıyor?