start.py कोड नीचे जैसा है।थ्रेडिंग मॉड्यूल में एक ही प्रोग्राम अलग आउटपुट
import threading
class myThread(threading.Thread):
def __init__(self, threadID, name):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
def run(self):
currentThreadname = threading.currentThread()
print "running in ", currentThreadname
thread = myThread(1,"mythrd")
thread.start()
इसे दो बार पाइथन के साथ शुरू करें।
python start.py
running in <myThread(mythrd, started 140461133485824)>
python start.py
running in <myThread(mythrd, started 140122860668672)>
run.py कोड नीचे जैसा है।
import threading
class myThread(threading.Thread):
def __init__(self, threadID, name):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
def run(self):
currentThreadname = threading.currentThread()
print "running in ", currentThreadname
thread = myThread(1,"mythrd")
thread.run()
run.py start.py से केवल एक पंक्ति अलग है।
अब दो बार के लिए run.py शुरू करें।
python run.py
running in <_MainThread(MainThread, started 139854546364160)>
python run.py
running in <_MainThread(MainThread, started 139854546364160)>
startandrun.py कोड नीचे जैसा है।
class myThread(threading.Thread):
def __init__(self, threadID, name):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
def run(self):
currentThreadname = threading.currentThread()
print "running in ", currentThreadname
thread = myThread(1,"mythrd")
thread.start()
thread.run()
अब दो बार के लिए startandrun.py शुरू करें।
python startandrun.py
running in <myThread(mythrd, started 140317119899392)>
running in <_MainThread(MainThread, started 140317144454912)>
python startandrun.py
running in running in <_MainThread(MainThread, started 139980210505472)>
<myThread(mythrd, started 139980185949952)>
JohanL के रूप में कहते हैं:
जब दो अलग-अलग धागे चल रहा है, सभी दांव बंद कर रहे हैं के रूप में जो पहले निष्पादित करेंगे।
आप मूल रूप से ऑपरेटिंग सिस्टम में शेड्यूलिंग छोड़ रहे हैं। startandrun.py निष्पादित करने के लिए पहली बार, thread.start()
thread.run()
से पहले मार डाला गया था, यह उत्पादन में परिणाम:
running in <myThread(mythrd, started 140317119899392)>
running in <_MainThread(MainThread, started 140317144454912)>
startandrun.py निष्पादित करने के लिए दूसरी बार, thread.start()
thread.run()
के बाद मार डाला गया था, क्यों उत्पादन में परिणाम नहीं :
running in <_MainThread(MainThread, started 140317144454912)>
running in <myThread(mythrd, started 140317119899392)>
बजाय
running in running in <_MainThread(MainThread, started 139980210505472)>
<myThread(mythrd, started 139980185949952)>
जब दो अलग-अलग धागे चल रहा है, सभी दांव के रूप में बंद कर रहे हैं जो पहले निष्पादित करेगा। आप मूल रूप से ऑपरेटिंग सिस्टम में शेड्यूलिंग छोड़ रहे हैं। यही कारण है कि जब आप अपने धागे एक ही डेटा तक पहुंच रहे हों तो आपको विभिन्न सिंक्रनाइज़ेशन प्राइमेटिव (सेमफोर, मॉनीटर et.c.) की आवश्यकता होती है। – JohanL
'thread.run' एक नया धागा शुरू नहीं करता है, इसलिए यह कोड शायद ऐसा नहीं कर रहा है जो आपको लगता है कि यह कर रहा है। धागा शुरू करने के लिए, आपको 'स्टार्ट' कॉल करना होगा। आपको सीधे 'रन' नहीं बुलाया जाना चाहिए, 'स्टार्ट' आपके लिए यह करेगा। कॉलिंग शुरू और रन सिर्फ उस समस्या को और भ्रमित करने में मदद करता है जिसे आप समझने की कोशिश कर रहे हैं। दस्तावेज़ देखें, जो इस बारे में काफी स्पष्ट हैं "एक बार थ्रेड ऑब्जेक्ट बनने के बाद, इसकी गतिविधि थ्रेड की प्रारंभ() विधि को कॉल करके प्रारंभ की जानी चाहिए। यह रन() विधि को नियंत्रण के एक अलग थ्रेड में आमंत्रित करता है।" – pvg