ماژول threading در پایتون

  • مدرس : علی بیگدلی
  • تاریخ انتشار: 1403/12/29
  • تعداد بازدید: 16

پیوست های این درس:


ماژول 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() باعث می‌شود که برنامه اصلی منتظر بماند تا رشته ایجاد شده به اتمام برسد.

ثبت دیدگاه


نکته: آدرس ایمیل شما منتشر نخواهد شد

دیدگاه کاربران (0)


هیچ دیدگاهی ثبت نشده است می توانید اولین نفر باشید