آموزش ماژول threading – کلاس Event

Please login to bookmark Close

مفهوم Event

فرض کنید چند دونده روی خط شروع ایستاده‌اند. آن‌ها آماده دویدن هستند، اما حق ندارند حرکت کنند تا زمانی که داور تپانچه را شلیک کند.

در پایتون، threading.Event دقیقاً نقش تپانچه داور را بازی می‌کند. این کلاس یک راه بسیار ساده برای ارتباط بین تردهاست تا یک ترد بتواند به تردهای دیگر بگوید: «صبر کنید… صبر کنید… حالا حرکت کنید!»

Event یک مکانیزم هماهنگی است که به چندین نخ اجازه می‌دهد تا به صورت همزمان روی یک رویداد منتظر بمانند و بعداً با فعال کردن آن، همه آن‌ها به صورت همزمان ادامه دهند. برای این کار ابتدا یک شیء از کلاس Event ایجاد می‌کنیم، سپس می‌توانیم با استفاده از متدهای wait و set و clear آن را مدیریت کنیم.

مکانیزم درونی Event

کلاس Event در دل خود فقط یک متغیر ساده از نوع Boolean دارد.

  • اگر این متغیر False باشد، تردهایی که به این Event نگاه می‌کنند متوقف می‌شوند و منتظر می‌مانند.
  • اگر این متغیر True شود، تمام تردهای منتظر، همزمان آزاد می‌شوند و کارشان را شروع می‌کنند.

در تکه کد زیر، یک مسابقه دو را شبیه سازی کرده ام.

import threading
import time

def worker(runner_id, start_signal):
    print(f"Runner {runner_id} is ready")
    start_signal.wait()
    print(f"Runner {runner_id} is running")

# 1. Create the Event (Initial state is False / Red Light)
start_signal = threading.Event()

# 2. Create and start 3 worker threads
for i in range(1, 4):
    t = threading.Thread(target=worker, args=(i, start_signal))
    t.start()

print("Please Waite!")
time.sleep(3)
print("GO!")

# 3. Give the green light! This unblocks all 3 workers at the exact same time.
start_signal.set()

در تکه کد بالا:

  • خط ۴ تا ۷: تابع worker یک دونده را شبیه سازی می‌کند که ابتدا برای مسابقه آماده می‌شود و سپس منتظر می‌ماند تا مسابقه با دستور داور شروع شود.
  • خط ۱۰: سیگنالی که در حکم تپانچه داور است ایجاد شده است.
  • خط ۱۵: ترد ها به محض ایجاد شدن start می‌شوند.
  • خط ۱۸: یک وقفه سه ثانیه ای ایجاد شده است.
  • خط ۲۲: با فراخوانی متد set مقدار True در Event قرار می‌گیرد و با این کار یک سیگنال ارسال می‌شود.
  • خط۶: متد wait که قبلا منتظر دریافت این سیگنال است، سیگنال را دریافت کرده و اجازه می‌دهد تا باقی کد های worker اجرا شوند.
Please login to bookmark Close
پیشرفت شما در «دوره آموزش کانکارنسی در پایتون» (35%)
نظرات

دیدگاهتان را بنویسید

35%
پیشرفت
فهرست مطالب

تمرین

این قسمت تمرین ندارد!

پاسخ تمرین ها

هنوز برای تمرین‌های این قسمت پاسخی ثبت نشده است!

اشتراک گذاری

چرا بهتره از فیلترشکن استفاده کنید؟

من همه ویدئو ها و پادکست های کُدباز رو توی یوتیوب و ساندکلود و پلتفرم هایی آپلود می‌کنم که اغلب فیلتر هستند.

اغلب آموزش‌ها ویدئو و پادکست دارند. پس اگر می‌خواهید از محتوای سایت بیشترین استفاده رو ببرید نیاز به فیلتر شکن دارید.

توجه داشته باشید که برای خرید از فروشگاه بهتره فیلتر شکن رو خاموش کنید.

تنظیمات

انتخاب زبان
تغییر تم