معرفی کلاس Thread
و روشهای اجرای آن
در ماژول threading
پایتون، کلاس Thread
ابزاری است که برای ایجاد و مدیریت رشتهها (Threads) استفاده میشود. یک رشته در واقع یک جریان اجرایی است که بهطور مستقل از دیگر بخشهای برنامه اجرا میشود. استفاده از Thread
به شما این امکان را میدهد که چندین وظیفه را بهطور همزمان (یا بهتر بگوییم، شبهموازی) اجرا کنید.
نحوه ایجاد یک کلاس Thread
برای استفاده از کلاس Thread
، میتوانید از دو روش اصلی استفاده کنید:
- انتقال تابع به پارامتر
target
- استفاده از یک زیرکلاس از
Thread
و بازنویسی متدrun()
روش اول: استفاده از پارامتر target
در این روش، میتوانید یک تابع را به عنوان پارامتر target
به کلاس Thread
ارسال کنید. رشتهای که ایجاد میشود، تابع مشخصشده را اجرا خواهد کرد.
مثال:
import threading
import time
# تعریف یک تابع ساده
def print_message():
for i in range(5):
print(f"Thread در حال اجرا: {i}")
time.sleep(1)
# ایجاد یک Thread و ارسال تابع به آن
thread = threading.Thread(target=print_message)
# شروع اجرای Thread
thread.start()
# اجرای کد اصلی همزمان با Thread
for i in range(5):
print(f"برنامه اصلی: {i}")
time.sleep(1)
# منتظر ماندن تا پایان اجرای Thread
thread.join()
print("اجرای همه وظایف به پایان رسید.")
در این مثال:
- یک تابع به نام
print_message
تعریف شده است که در آن ازtime.sleep(1)
برای تأخیر بین چاپها استفاده میشود. - کلاس
Thread
با پارامترtarget=print_message
ساخته میشود و با استفاده ازthread.start()
رشته شروع به اجرا میکند. - با استفاده از
join()
، برنامه اصلی منتظر میماند تا رشته تکمیل شود.
روش دوم: استفاده از زیرکلاس Thread
در این روش، شما میتوانید یک کلاس جدید بسازید که از Thread
ارثبری کرده و متد run()
را بازنویسی کنید. این متد زمانی که start()
فراخوانی میشود، اجرا خواهد شد.
مثال:
import threading
import time
# ایجاد یک زیرکلاس از Thread
class MyThread(threading.Thread):
def run(self):
for i in range(5):
print(f"Thread در حال اجرا: {i}")
time.sleep(1)
# ایجاد و شروع یک رشته
thread = MyThread()
thread.start()
# اجرای کد اصلی همزمان با Thread
for i in range(5):
print(f"برنامه اصلی: {i}")
time.sleep(1)
# منتظر ماندن تا پایان اجرای Thread
thread.join()
print("اجرای همه وظایف به پایان رسید.")
در این مثال:
- ما یک کلاس جدید به نام
MyThread
ایجاد کردهایم که ازThread
ارثبری میکند و متدrun()
را بازنویسی میکنیم. - زمانی که
thread.start()
فراخوانی میشود، متدrun()
در رشته جدید اجرا میشود. - همانند روش قبلی، از
join()
برای اطمینان از تکمیل اجرای رشته استفاده میکنیم.
متدهای کلیدی در کلاس Thread
در اینجا به برخی از متدهای مهم در کلاس Thread
اشاره میکنیم:
start()
: اجرای رشته را آغاز میکند.run()
: متدی است که باید در هنگام ایجاد یک زیرکلاس ازThread
بازنویسی شود. این متد زمانی اجرا میشود که رشته شروع به کار میکند.join()
: برنامه اصلی را متوقف میکند تا زمانی که رشته تکمیل شود.is_alive()
: بررسی میکند که آیا رشته هنوز در حال اجرا است یا خیر.name
: نام رشته را تعیین یا دریافت میکند.
نکات مهم
- زمانی که از
start()
استفاده میکنید، رشته بلافاصله شروع به اجرا میکند. - متد
join()
باعث میشود که برنامه منتظر بماند تا رشته تکمیل شود، که معمولاً برای همزمانی صحیح بین رشتهها ضروری است. - Daemon Threads: اگر بخواهید رشتهای بهطور خودکار پس از پایان برنامه خاتمه یابد، میتوانید آن را به یک رشته Daemon تبدیل کنید. برای این کار، کافی است از
thread.daemon = True
قبل ازstart()
استفاده کنید.
جمعبندی
ماژول threading
به شما این امکان را میدهد که با استفاده از کلاس Thread
چندین وظیفه را بهطور همزمان اجرا کنید. این کار میتواند عملکرد برنامه شما را بهبود دهد، بهویژه برای برنامههایی که نیاز به مدیریت I/O دارند.