पायथन मल्टीप्रोसेसिंग (एक 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
के रूप में अच्छी तरह से एक के रूप में 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()
विधि यहाँ कुछ भी कर रही है? क्या यह एक प्रक्रिया को समाप्त कर रहा है? या यह सिर्फ पायथन की मूल .join()
विधि के साथ एक नाम साझा करता है ?
CPU, Memory resources
मूल प्रक्रिया से अलग हो रहा है, फिर join
बच्चे की प्रक्रिया पूरी होने के बाद फिर से एड करें?