इस धागे के लिए धन्यवाद - इसने मुझे बहुत मदद की।
मैंने आज .join () के बारे में कुछ सीखा।
ये धागे समानांतर में चलते हैं:
d.start()
t.start()
d.join()
t.join()
और ये क्रमिक रूप से चलते हैं (जो मैं चाहता था):
d.start()
d.join()
t.start()
t.join()
विशेष रूप से, मैं चतुर और चुस्त होने की कोशिश कर रहा था:
class Kiki(threading.Thread):
def __init__(self, time):
super(Kiki, self).__init__()
self.time = time
self.start()
self.join()
यह काम! लेकिन यह क्रमिक रूप से चलता है। मैं __ init __ में self.start () लगा सकता हूं, लेकिन self.join () नहीं। जो हर धागे को शुरू करने के बाद किया जाना चाहिए ।
जुड़ना () वह है जो आपके धागे के खत्म होने का इंतजार करने के लिए मुख्य धागा का कारण बनता है। अन्यथा, आपका धागा सभी अपने आप चलता है।
तो जुड़ने के बारे में सोचने का एक तरीका () मुख्य धागे पर "पकड़" के रूप में - यह आपके धागे को डी-थ्रेड करता है और मुख्य धागे में क्रमिक रूप से निष्पादित होता है, इससे पहले कि मुख्य धागा जारी रह सकता है। यह आश्वस्त करता है कि मुख्य धागा आगे बढ़ने से पहले आपका धागा पूरा हो गया है। ध्यान दें कि इसका मतलब यह ठीक है अगर आप जुड़ने से पहले अपने धागे को समाप्त कर चुके हैं () - मुख्य धागा बस तुरंत छोड़ दिया जाता है जब जुड़ना () कहा जाता है।
वास्तव में, यह अभी मेरे साथ होता है कि मुख्य धागा d.join () पर इंतजार करता है जब तक कि धागा d खत्म नहीं होता इससे पहले कि वह t.join () पर चले।
वास्तव में, बहुत स्पष्ट होने के लिए, इस कोड पर विचार करें:
import threading
import time
class Kiki(threading.Thread):
def __init__(self, time):
super(Kiki, self).__init__()
self.time = time
self.start()
def run(self):
print self.time, " seconds start!"
for i in range(0,self.time):
time.sleep(1)
print "1 sec of ", self.time
print self.time, " seconds finished!"
t1 = Kiki(3)
t2 = Kiki(2)
t3 = Kiki(1)
t1.join()
print "t1.join() finished"
t2.join()
print "t2.join() finished"
t3.join()
print "t3.join() finished"
यह इस आउटपुट का उत्पादन करता है (ध्यान दें कि प्रिंट स्टेटमेंट एक दूसरे में कैसे पिरोए गए हैं।)
$ python test_thread.py
32 seconds start! seconds start!1
seconds start!
1 sec of 1
1 sec of 1 seconds finished!
21 sec of
3
1 sec of 3
1 sec of 2
2 seconds finished!
1 sec of 3
3 seconds finished!
t1.join() finished
t2.join() finished
t3.join() finished
$
T1.join () मुख्य धागा धारण कर रहा है। सभी तीन धागे t1.join () के पूरा होने से पहले पूरा हो जाता है और मुख्य धागा प्रिंट को निष्पादित करने के लिए आगे बढ़ता है फिर t2.join () फिर प्रिंट तब t3.join () प्रिंट होता है।
सुधार का स्वागत करते हैं। मैं थ्रेडिंग के लिए भी नया हूं।
(ध्यान दें: यदि आप रुचि रखते हैं, तो मैं एक ड्रिंकबॉट के लिए कोड लिख रहा हूं, और मुझे प्रत्येक पेय के लिए इंतजार करने के लिए क्रमिक रूप से - बजाय कम समय के संघटक पंपों को चलाने के लिए थ्रेडिंग की आवश्यकता है।)