เรียนรู้เกี่ยวกับ Python Multiprocessing (จากบทความ PMOTW ) และชอบคำชี้แจงเกี่ยวกับjoin()
วิธีการนี้
ในบทช่วยสอนเก่าตั้งแต่ปี 2008ระบุว่าหากไม่มีการp.join()
เรียกในโค้ดด้านล่าง "กระบวนการย่อยจะไม่ได้ใช้งานและไม่ยุติกลายเป็นซอมบี้ที่คุณต้องฆ่าด้วยตนเอง"
from multiprocessing import Process
def say_hello(name='world'):
print "Hello, %s" % name
p = Process(target=say_hello)
p.start()
p.join()
ฉันได้เพิ่มงานพิมพ์ของPID
a time.sleep
เพื่อทดสอบและเท่าที่ฉันสามารถบอกได้กระบวนการนี้จะสิ้นสุดลงด้วยตัวเอง:
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 วินาที:
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 วินาที:
947 ttys001 0:00.13 -bash
ลักษณะการทำงานจะเหมือนกันเมื่อp.join()
เพิ่มกลับที่ท้ายไฟล์ งูหลามโมดูลของสัปดาห์มีคำอธิบายที่อ่านได้มากของโมดูล ; "ในการรอจนกว่ากระบวนการทำงานจะเสร็จสิ้นและออกจากระบบให้ใช้เมธอด join ()" แต่ดูเหมือนว่าอย่างน้อย OS X ก็ทำเช่นนั้นอยู่ดี
ฉันยังสงสัยเกี่ยวกับชื่อของวิธีการ เป็น.join()
วิธีการเชื่อมโยงอะไรที่นี่? การเชื่อมต่อกับกระบวนการสิ้นสุดลงหรือไม่ หรือเพียงแค่ใช้ชื่อร่วมกับ.join()
วิธีดั้งเดิมของ Python ?
CPU, Memory resources
จึงถูกแยกออกจากกระบวนการหลักจากนั้นjoin
แก้ไขอีกครั้งหลังจากกระบวนการย่อยเสร็จสิ้นแล้ว?