روش‌های اجرای Thread

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

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


معرفی کلاس Thread و روش‌های اجرای آن

در ماژول threading پایتون، کلاس Thread ابزاری است که برای ایجاد و مدیریت رشته‌ها (Threads) استفاده می‌شود. یک رشته در واقع یک جریان اجرایی است که به‌طور مستقل از دیگر بخش‌های برنامه اجرا می‌شود. استفاده از Thread به شما این امکان را می‌دهد که چندین وظیفه را به‌طور همزمان (یا بهتر بگوییم، شبه‌موازی) اجرا کنید.

نحوه ایجاد یک کلاس Thread

برای استفاده از کلاس Thread، می‌توانید از دو روش اصلی استفاده کنید:

  1. انتقال تابع به پارامتر target
  2. استفاده از یک زیرکلاس از 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 دارند.

ثبت دیدگاه


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

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


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