उत्तर नीचे दिए गए लिंक पर मेरे सामने सही हो सकता है लेकिन मुझे अभी भी समझ में नहीं आता है। मुझे यकीन है कि किसी ने मुझे यह समझाए जाने के बाद, डार्विन मुझसे फोन करेंगे।डेमॉन प्रोग्राम क्यों शामिल नहीं होता है()
उदाहरण at this link here है, हालांकि मैंने प्रयोग करने और मेरी समझ में मदद करने के लिए कुछ बदलाव किए हैं।
कोड यह रहा:
import multiprocessing
import time
import sys
def daemon():
p = multiprocessing.current_process()
print 'Starting: ', p.name, p.pid
sys.stdout.flush()
time.sleep(2)
print 'Exiting: ', p.name, p.pid
sys.stdout.flush()
def non_daemon():
p = multiprocessing.current_process()
print 'Starting: ', p.name, p.pid
sys.stdout.flush()
time.sleep(6)
print 'Exiting: ', p.name, p.pid
sys.stdout.flush()
if __name__ == '__main__':
d = multiprocessing.Process(name='daemon', target=daemon)
d.daemon = True
n = multiprocessing.Process(name='non-daemon', target=non_daemon)
n.daemon = False
d.start()
time.sleep(1)
n.start()
# d.join()
और कोड के उत्पादन में है:
Starting: daemon 6173
Starting: non-daemon 6174
Exiting: non-daemon 6174
हैं में शामिल होने के() पर अंत uncommented है, तो उत्पादन होता है:
Starting: daemon 6247
Starting: non-daemon 6248
Exiting: daemon 6247
Exiting: non-daemon 6248
मैं भ्रमित हूं बी/सी डिमन की नींद 2 सेकंड है, जबकि गैर-डिमन 6 सेकंड है। यह पहले मामले में "बाहर निकलने" संदेश क्यों मुद्रित नहीं करता है? डिमन को गैर-डिमन से पहले जागृत होना चाहिए और संदेश मुद्रित करना चाहिए था।
साइट से स्पष्टीकरण इस तरह के रूप में है:
उत्पादन डेमॉन प्रक्रिया से "बाहर निकल रहा है" संदेश, शामिल नहीं है के बाद से गैर डेमॉन प्रक्रियाओं के सभी (मुख्य कार्यक्रम सहित) डेमॉन प्रक्रिया से पहले बाहर निकलें इसके 2 सेकंड नींद से उठता है।
लेकिन मैंने इसे बदल दिया कि डिमन को गैर-डिमन के पहले जागृत होना चाहिए था। मुझे यहां क्या समझ नहीं आ रहा है? आपकी सहायता के लिये पहले से ही धन्यवाद।
संपादित करें: मैं अजगर 2.7 का उपयोग कर रहा उल्लेख करने के लिए भूल लेकिन जाहिरा तौर पर इस समस्या को अजगर 3.x
मैं यह एक बग का गठन के बाद से व्यवहार 'threading' से अलग है, जहां डेमॉन धागे चालू रखने (जो' multiprocessing' धागे के बजाय प्रक्रियाओं का उपयोग कर अनुकरण करने के लिए माना जाता है), जबकि _any_ गैर डेमॉन धागा जिंदा रहता है तय कर लिया है (मुख्य या अन्यथा)। खोला [बग # 26,633] (https://bugs.python.org/issue26633)। इस समस्या की जांच में ऊपर और परे जा रहा है के लिए – ShadowRanger
THX। सुनने के लिए मैं पागल नहीं हूँ और खुशी है कि डार्विन मेरे लिए बुला नहीं किया जाएगा, कम से कम इस समय =) – Classified