استفاده از 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()
برای نظارت بر تمام نخهای فعال و نمایش وضعیت آنها استفاده میشود.
این دو ابزار به شما کمک میکنند تا بتوانید نخها را در برنامههای چندرشتهای مدیریت و بررسی کنید.