निम्नलिखित कोड पर विचार करें:
#/usr/bin/env python
from time import sleep
from random import random
from threading import Thread, local
data = local()
def bar():
print("I'm called from", data.v)
def foo():
bar()
class T(Thread):
def run(self):
sleep(random())
data.v = self.getName() # Thread-1 and Thread-2 accordingly
sleep(1)
foo()
>> टी ()। प्रारंभ (); टी ()। शुरू ()
मुझे थ्रेड -2 से बुलाया जाता है
मुझे थ्रेड -1 से बुलाया जाता है
यहाँ थ्रेडिंग .local () का उपयोग फु ट () के इंटरफ़ेस को बदले बिना रन () से बार () तक कुछ डेटा पास करने के लिए एक त्वरित और गंदे तरीके के रूप में किया जाता है।
ध्यान दें कि वैश्विक चर का उपयोग करने से चाल नहीं चलेगी:
#/usr/bin/env python
from time import sleep
from random import random
from threading import Thread
def bar():
global v
print("I'm called from", v)
def foo():
bar()
class T(Thread):
def run(self):
global v
sleep(random())
v = self.getName() # Thread-1 and Thread-2 accordingly
sleep(1)
foo()
>> टी ()। प्रारंभ (); टी ()। शुरू ()
मुझे थ्रेड -2 से बुलाया जाता है
मुझे थ्रेड -2 से बुलाया जाता है
इस बीच, अगर आप फू के तर्क के रूप में इस डेटा को पारित कर सकते हैं () - यह एक अधिक सुंदर और अच्छी तरह से डिज़ाइन किया गया तरीका होगा:
from threading import Thread
def bar(v):
print("I'm called from", v)
def foo(v):
bar(v)
class T(Thread):
def run(self):
foo(self.getName())
लेकिन यह हमेशा संभव नहीं होता है जब तृतीय-पक्ष या खराब डिज़ाइन किए गए कोड का उपयोग किया जाता है।