استفاده از current_thread و enumerate

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

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


استفاده از current_thread و enumerate در پایتون

در پایتون، ماژول threading دو تابع مهم به نام‌های current_thread() و enumerate() دارد که برای مدیریت و دسترسی به نخ‌ها (threads) مفید هستند. این توابع ابزارهای قدرتمندی برای تعامل با نخ‌ها و مدیریت وضعیت آن‌ها فراهم می‌کنند.

1. current_thread()

تابع current_thread() در ماژول threading به شما این امکان را می‌دهد که به نخ جاری (نخی که کد در حال حاضر در آن اجرا می‌شود) دسترسی پیدا کنید. این تابع شیء نخ جاری را برمی‌گرداند.

ویژگی‌ها:

  • تابع current_thread() نخ جاری را به صورت یک شیء از کلاس Thread برمی‌گرداند.
  • با استفاده از این شیء می‌توان به ویژگی‌ها و متدهای مختلف نخ دسترسی پیدا کرد.
  • معمولاً برای گرفتن اطلاعات در مورد نخ جاری (مثل نام نخ یا شناسایی آن) استفاده می‌شود.

مثال استفاده از current_thread()

import threading

def print_current_thread():
    current = threading.current_thread()
    print(f"نام نخ جاری: {current.name}")
    print(f"شناسایی نخ جاری: {current.ident}")

# اجرای تابع در نخ اصلی
print_current_thread()

شرح مثال:

  • تابع print_current_thread با استفاده از threading.current_thread() شیء نخ جاری را دریافت کرده و اطلاعات آن را چاپ می‌کند.
  • در این مثال، در نخ اصلی (main thread)، نام و شناسه نخ جاری چاپ می‌شود.

2. enumerate()

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

ویژگی‌ها:

  • enumerate() یک لیست از شیء نخ‌هایی که در حال حاضر فعال هستند، برمی‌گرداند.
  • می‌توانید از این لیست برای نظارت بر وضعیت نخ‌ها و انجام اقدامات خاص استفاده کنید.

مثال استفاده از enumerate()

import threading
import time

def worker():
    print(f"رشته {threading.current_thread().name} در حال انجام کار...")
    time.sleep(2)
    print(f"رشته {threading.current_thread().name} کار را تمام کرد.")

# ایجاد نخ‌ها
threads = []
for i in range(3):
    thread = threading.Thread(target=worker, name=f"Thread-{i+1}")
    threads.append(thread)
    thread.start()

# استفاده از enumerate برای چاپ تمام نخ‌های فعال
time.sleep(1)
print("تمام نخ‌های فعال:")
for t in threading.enumerate():
    print(t.name)

# منتظر ماندن تا پایان نخ‌ها
for t in threads:
    t.join()

شرح مثال:

  • سه نخ به نام‌های Thread-1, Thread-2, و Thread-3 ایجاد شده و شروع به کار می‌کنند.
  • در میانه اجرای نخ‌ها، با استفاده از threading.enumerate() لیستی از نخ‌های فعال چاپ می‌شود.
  • با فراخوانی join()، منتظر می‌مانیم تا تمام نخ‌ها به اتمام برسند.

تفاوت‌های کلیدی بین current_thread() و enumerate()

ویژگی current_thread() enumerate()
خروجی نخ جاری (شیء Thread برای نخ فعال) لیستی از تمام نخ‌های فعال در برنامه
زمان استفاده برای دریافت اطلاعات نخ در حال اجرای کد برای لیست کردن تمام نخ‌های فعال در برنامه
کاربرد برای نمایش اطلاعات نخ جاری برای نظارت بر وضعیت تمامی نخ‌ها در یک برنامه
تعداد نخ‌ها تنها نخ جاری را برمی‌گرداند تمام نخ‌های فعال را برمی‌گرداند

نتیجه‌گیری

  • current_thread() برای دسترسی به نخ جاری و اطلاعات مربوط به آن مفید است.
  • enumerate() برای نظارت بر تمام نخ‌های فعال و نمایش وضعیت آن‌ها استفاده می‌شود.

این دو ابزار به شما کمک می‌کنند تا بتوانید نخ‌ها را در برنامه‌های چندرشته‌ای مدیریت و بررسی کنید.

ثبت دیدگاه


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

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


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