معرفی کلاس 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 دارند.