فعالیت محلی؛ در مرورگر این دوره اجرا و نمرهدهی نمیشه. ترد یعنی یک مسیر اجرای جدا داخل برنامه. چند ترد میتونن کارها رو همزمان جلو ببرن و به حافظه مشترک دسترسی داشته باشن. وقتی برنامه منتظر ورودیوخروجی، مثل پاسخ شبکه یا فایل، میمونه، چند ترد میتونن مفید باشن. start() اجرای کار رو راه میاندازه؛ join() منتظر پایان همون ترد میمونه. اگه مستقیم worker() رو صدا بزنیم، تابع در مسیر فعلی اجرا میشه.
import threading
import time
def wait_for_source(name):
time.sleep(0.2) # فقط شبیهسازی انتظار، نه کار محاسباتی
print(name, "آماده شد")
threads = [
threading.Thread(target=wait_for_source, args=("اول",)),
threading.Thread(target=wait_for_source, args=("دوم",)),
]
for thread in threads:
thread.start()
for thread in threads:
thread.join()
print("هر دو تمام شدند")
ترتیب دو پیام اول تضمین نشده، اما پیام آخر بعد از پایان هر دو میاد. ترد بیشتر همیشه به معنی سرعت بیشتر نیست. در نسخههای معمول CPython، قفلی به اسم GIL اجازه نمیده چند ترد کد خالص پایتون رو همزمان روی چند هسته اجرا کنن. پس ترد معمولاً محاسبات سنگین رو سریعتر نمیکنه. بعضی نسخهها و افزونهها رفتار متفاوتی دارن. فعلاً ترد رو برای هماهنگ کردن انتظارهای مستقل بشناس و برای محاسبات سنگین بعداً سراغ فرایندها برو.
فعالیت شما
با start و join کار کن و ببین چرا ترتیب بعضی خروجیهای تردها قابل پیشبینی نیست.