Belajar tentang Python Multiprocessing (dari artikel PMOTW ) dan akan menyukai beberapa klarifikasi tentang apa sebenarnya yang dilakukan join()
metode ini.
Dalam tutorial lama dari tahun 2008 disebutkan bahwa tanpa p.join()
panggilan dalam kode di bawah ini, "proses anak akan diam dan tidak berhenti, menjadi zombie yang harus Anda bunuh secara manual".
from multiprocessing import Process
def say_hello(name='world'):
print "Hello, %s" % name
p = Process(target=say_hello)
p.start()
p.join()
Saya menambahkan cetakan dari PID
serta a time.sleep
untuk diuji dan sejauh yang saya tahu, prosesnya berakhir dengan sendirinya:
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()
dalam 20 detik:
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
setelah 20 detik:
947 ttys001 0:00.13 -bash
Perilakunya sama dengan p.join()
menambahkan kembali di akhir file. Python Module of the Week menawarkan penjelasan modul yang sangat mudah dibaca ; "Untuk menunggu hingga proses menyelesaikan pekerjaannya dan keluar, gunakan metode join ().", Tetapi tampaknya setidaknya OS X melakukannya.
Saya juga bertanya-tanya tentang nama metode tersebut. Apakah .join()
metode ini menggabungkan sesuatu di sini? Apakah itu menggabungkan proses dengan akhirnya? Atau apakah itu hanya berbagi nama dengan bahasa asli Python.join()
metode ?
CPU, Memory resources
dipisahkan dari proses induk, lalu join
diedit kembali setelah proses anak selesai?