কম্পিউটার টিউটোরিয়াল

পাইথনে থ্রেড-ভিত্তিক প্যারালেলিজম (Threading)


থ্রেড কী?

থ্রেড হলো নির্দেশাবলির একটি সেট যা অপারেটিং সিস্টেমের শিডিউলার দ্বারা স্বাধীনভাবে ম্যানেজ হয়। একটি প্রসেসের ভেতরে একাধিক থ্রেড কনকারেন্টলি চলতে পারে।

থ্রেডিং মডিউলের প্রধান ফাংশন

উদাহরণ: কাস্টম থ্রেড ক্লাস


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 — সিঙ্ক্রোনাইজেশন প্রিমিটিভ
  1. C#-এ টাস্ক-বেসড প্যারাললিজম (Thread-Based Parallelism)

  2. Tkinter Python-এ Thread ব্যবহার করার পদ্ধতি

  3. পাইথনে issuperset() ফাংশন

  4. পাইথনে থ্রেডে এক্সসেপশন হ্যান্ডলিং

কপিরাইট © https://bd.wsxdn.com সমস্ত অধিকার সংরক্ষিত
ফাংশনকাজ
threading.active_count()জীবিত থ্রেড অবজেক্টের সংখ্যা রিটার্ন করে
threading.current_thread()বর্তমান থ্রেড অবজেক্ট রিটার্ন করে
threading.get_ident()বর্তমান থ্রেডের আইডেন্টিফায়ার (ইন্টিজার) রিটার্ন করে
threading.enumerate()সব জীবিত থ্রেডের লিস্ট রিটার্ন করে (ডেমন থ্রেডসহ)
threading.main_thread()মেইন থ্রেড অবজেক্ট রিটার্ন করে
threading.settrace(func)সব থ্রেডের জন্য ট্রেস ফাংশন সেট করে
threading.setprofile(func)সব থ্রেডের জন্য প্রোফাইল ফাংশন সেট করে
threading.stack_size([size])থ্রেড স্ট্যাক সাইজ রিটার্ন/সেট করে