ماژول threading
در پایتون
ماژول threading
برای ایجاد و مدیریت چندریسمانی (Multithreading) در یک فرآیند استفاده میشود. این ماژول به شما امکان میدهد که چندین رشته (Thread) را بهصورت همزمان اجرا کنید. بااینحال، به دلیل Global Interpreter Lock (GIL) در پایتون، اجرای واقعی چندین رشته روی چندین هسته پردازنده ممکن نیست و تنها یک رشته در هر لحظه روی CPU اجرا میشود.
ویژگیهای ماژول threading
- امکان ایجاد و مدیریت چندین رشته (Thread) در یک فرآیند
- پشتیبانی از شروع (
start
)، توقف (join
) و مدیریت رشتهها - قابلیت استفاده از قفلها (
Lock
) و سایر مکانیزمهای همگامسازی برای جلوگیری از شرایط رقابتی - مناسب برای وظایف سبک و I/O-bound مانند درخواستهای شبکهای، خواندن فایلها، و تعامل با پایگاه داده
کلاسهای کلیدی در threading
کلاس / ویژگی | توضیحات |
---|---|
Thread |
کلاس اصلی برای ایجاد و مدیریت رشتهها |
Lock |
مکانیزم قفل برای جلوگیری از تداخل در منابع مشترک |
RLock |
یک قفل بازگشتی که توسط یک رشته میتواند چندین بار گرفته شود |
Event |
سیگنالدهی بین رشتهها برای هماهنگسازی |
Semaphore |
محدود کردن تعداد رشتههایی که میتوانند همزمان اجرا شوند |
Timer |
اجرای یک تابع بعد از یک مدت مشخص |
active_count() |
تعداد رشتههای فعال را برمیگرداند |
current_thread() |
اطلاعات رشته فعلی را بازمیگرداند |
چه زمانی از threading
استفاده کنیم؟
- در برنامههای GUI که چندین عملیات باید بدون متوقف کردن رابط کاربری اجرا شوند
- در سرورهای سبک که نیاز به پردازش چندین درخواست همزمان دارند
- برای وظایف سبک و سریع که نیاز به پردازشهای پیچیده و طولانی ندارند
اگر پردازش شما CPU-bound است (محاسبات سنگین مانند پردازش تصویر یا تحلیل داده)، بهجای threading
باید از ماژول multiprocessing
استفاده کنید، زیرا multiprocessing
امکان استفاده از چندین هسته پردازنده را فراهم میکند.
ایجاد یک 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
در یک رشته جداگانه اجرا میشود، درحالیکه حلقه اصلی برنامه نیز همزمان کار خود را انجام میدهد. دستور join()
باعث میشود که برنامه اصلی منتظر بماند تا رشته ایجاد شده به اتمام برسد.