নিম্নলিখিত কোড বিবেচনা করুন:
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()
sleep(1)
foo()
>> টি ()। স্টার্ট (); টি ()। শুরু ()
আমাকে থ্রেড -২ থেকে ফোন করা হয়েছে
আমাকে থ্রেড -১ থেকে ফোন করা হয়েছে
এখানে থ্রেডিং.লোকাল () foo () এর ইন্টারফেস পরিবর্তন না করে রান () থেকে বার () এ কিছু তথ্য পাস করার জন্য দ্রুত এবং নোংরা উপায় হিসাবে ব্যবহৃত হয়।
নোট করুন যে গ্লোবাল ভেরিয়েবলগুলি ব্যবহার করা কৌশলটি করবে না:
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()
sleep(1)
foo()
>> টি ()। স্টার্ট (); টি ()। শুরু ()
আমাকে থ্রেড -২ থেকে ফোন করা হয়েছে
আমাকে থ্রেড -২ থেকে ফোন করা হয়েছে
এদিকে, আপনি যদি foo () এর আর্গুমেন্ট হিসাবে এই ডেটাটি পাস করার পক্ষে সক্ষম হন - এটি আরও মার্জিত এবং সু-নকশাকৃত উপায় হবে:
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())
তৃতীয় পক্ষ বা দুর্বল ডিজাইন কোড ব্যবহার করার সময় এটি সর্বদা সম্ভব হয় না।