থ্রেড কী?
থ্রেড হলো নির্দেশাবলির একটি সেট যা অপারেটিং সিস্টেমের শিডিউলার দ্বারা স্বাধীনভাবে ম্যানেজ হয়। একটি প্রসেসের ভেতরে একাধিক থ্রেড কনকারেন্টলি চলতে পারে।
থ্রেডিং মডিউলের প্রধান ফাংশন
| ফাংশন | কাজ |
threading.active_count() | জীবিত থ্রেড অবজেক্টের সংখ্যা রিটার্ন করে |
threading.current_thread() | বর্তমান থ্রেড অবজেক্ট রিটার্ন করে |
threading.get_ident() | বর্তমান থ্রেডের আইডেন্টিফায়ার (ইন্টিজার) রিটার্ন করে |
threading.enumerate() | সব জীবিত থ্রেডের লিস্ট রিটার্ন করে (ডেমন থ্রেডসহ) |
threading.main_thread() | মেইন থ্রেড অবজেক্ট রিটার্ন করে |
threading.settrace(func) | সব থ্রেডের জন্য ট্রেস ফাংশন সেট করে |
threading.setprofile(func) | সব থ্রেডের জন্য প্রোফাইল ফাংশন সেট করে |
threading.stack_size([size]) | থ্রেড স্ট্যাক সাইজ রিটার্ন/সেট করে |
উদাহরণ: কাস্টম থ্রেড ক্লাস
import threading
def trace_function():
print("Passing the trace function")
def profile():
print("PROFILE THREAD: " + threading.current_thread().getName())
class MyThread(threading.Thread):
def __init__(self, thread_name, thread_id):
threading.Thread.__init__(self)
self.thread_name = thread_name
self.thread_id = thread_id
def run(self):
print(self.thread_id)
print("ACTIVE THREADS ARE: " + str(threading.active_count()))
print("CURRENT THREAD IS: " + threading.current_thread().getName())
# ট্রেস ও প্রোফাইল সেট
threading.settrace(trace_function)
threading.setprofile(profile)
# থ্রেড তৈরি ও স্টার্ট
thread1 = MyThread("PP", 500)
thread2 = MyThread("PythonProgram", 1000)
print("NAME OF THE MAIN THREAD: " + threading.main_thread().getName())
print("IDENTIFICATION OF MAIN THREAD: " + str(threading.get_ident()))
print("STACK SIZE = " + str(threading.stack_size()))
thread1.start()
thread2.start()
print("LIST OF ENUMERATION:")
print(threading.enumerate())
print("EXIT")
আউটপুট নমুনা
NAME OF THE MAIN THREAD: MainThread
IDENTIFICATION OF MAIN THREAD: 5436
STACK SIZE = 0
Passing the trace function
PROFILE THREAD: MainThread
500
1000
LIST OF ENUMERATION:
[<_MainThread(MainThread, started 5436)>, , ...]
EXIT
CURRENT THREAD IS: Thread-8
ACTIVE THREADS ARE: 5
CURRENT THREAD IS: Thread-9
গ্লোবাল ইন্টারপ্রেটার লক (GIL) নোট
পাইথনের GIL কারনে CPU-বাউন্ড টাস্কে থ্রেডিং থেকে সত্যিকারের প্যারালেলিজম পাওয়া যায় না। CPU-বাউন্ড কাজের জন্য multiprocessing মডিউল ব্যবহার করুন। I/O-বাউন্ড কাজের (নেটওয়ার্ক, ফাইল, ডাটাবেস) জন্য থ্রেডিং ভালো কাজ করে।
সামঞ্জস্যপূর্ণ (Thread-Safe) ডেটা স্ট্রাকচার
queue.Queue — থ্রেড-সেফ কিউ
threading.Lock, RLock — মিউটেক্স
threading.Condition, Event, Semaphore — সিঙ্ক্রোনাইজেশন প্রিমিটিভ