حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
آموزش پایتون پروژه‌محور؛ قسمت سوم: شیءگرایی تا ساخت برنامه

آموزش threading در پایتون؛ کاربرد start و join

آموزش threading و ساخت رابط گرافیکی با Tkinter · 0٪

فعالیت محلی؛ در مرورگر این دوره اجرا و نمره‌دهی نمی‌شه. ترد یعنی یک مسیر اجرای جدا داخل برنامه. چند ترد می‌تونن کارها رو هم‌زمان جلو ببرن و به حافظه مشترک دسترسی داشته باشن. وقتی برنامه منتظر ورودی‌وخروجی، مثل پاسخ شبکه یا فایل، می‌مونه، چند ترد می‌تونن مفید باشن. 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 کار کن و ببین چرا ترتیب بعضی خروجی‌های تردها قابل پیش‌بینی نیست.

مطالعهٔ این گام برای همه آزاد است

برای پاسخ‌دادن، بررسی پاسخ، ثبت پیشرفت و استفاده از دستیار باید شرایط شرکت در فعالیت‌ها را داشته باشید.

برای انجام فعالیت وارد شوید

فعالیت‌های این بخش به اشتراک فعال نیاز دارند. تهیهٔ اشتراک

برای انجام فعالیت‌ها ابتدا این دوره‌های پیش‌نیاز را تکمیل کنید: