এই থ্রেডের জন্য ধন্যবাদ - এটি আমাকে অনেক সাহায্য করেছে।
আমি আজই জয়ন () সম্পর্কে কিছু শিখলাম।
এই থ্রেডগুলি সমান্তরালভাবে চলে:
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 __ এ রাখতে পারি তবে স্ব.জয়েন () না। প্রতিটি থ্রেড শুরু হওয়ার পরে এটি করা উচিত ।
যোগ দিন () যা মূল থ্রেডটি আপনার থ্রেডটি শেষ হওয়ার জন্য অপেক্ষা করে। অন্যথায়, আপনার থ্রেডটি নিজেই চালিত হয়।
সুতরাং মূল থ্রেডটিতে "হোল্ড" হিসাবে যোগদানের () যোগসূত্র ভাবার এক উপায় - এটি আপনার থ্রেডকে ধরণের করে এবং মূল থ্রেডটি ক্রমাগতভাবে চালিত করে, মূল থ্রেডটি চালিয়ে যাওয়ার আগে। এটি আশ্বাস দেয় যে মূল থ্রেড এগিয়ে যাওয়ার আগে আপনার থ্রেডটি সম্পূর্ণ is মনে রাখবেন এর অর্থ এটি ঠিক আছে যদি আপনি জোড় () কল করার আগে আপনার থ্রেডটি ইতিমধ্যে শেষ হয়ে যায় - জয়েন () বলা হওয়ার পরে মূল থ্রেডটি তত্ক্ষণাত্ প্রকাশ করা হয়।
আসলে, এটি এখনই আমার কাছে ঘটেছিল যে মূল থ্রেডটি d.join () এ অপেক্ষা করে থাকে যতক্ষণ না থ্রেড ডি শেষ হয় এটি 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 () তারপরে মুদ্রণ করুন।
সংশোধন স্বাগত। আমি থ্রেডিংয়েও নতুন।
(দ্রষ্টব্য: আপনি যদি আগ্রহী হন তবে আমি একটি ড্রিংকবটের জন্য কোড লিখছি, এবং উপাদান পাম্পগুলি ক্রমান্বয়ে পরিবর্তে একযোগে চালানোর জন্য আমার থ্রেডিং দরকার - প্রতিটি পানীয়ের জন্য অপেক্ষা করার জন্য কম সময়)))