راه
۴ کیو· سختپیشرفتهPYTHON۴ ثانیه · ۲۵۶ مگابایت

کمبود وقت

سه تابع طاها بالای کد تو آماده است. در داوری، زمان هر کار کسری از ثانیه است (مثلاً 0.2 0.3 0.4) تا داوری طول نکشد؛ منطق همان است که در نمونه آمده.

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

طاها سه کار برای انجام دارد که اولویت انجام آن‌ها به این ترتیب است:

  1. grow_plants: او باید گل و گیاه‌هایش را آب دهد.
  2. listen_to_music: او می‌خواهد آهنگ‌های جدید خواننده‌ی موردعلاقه‌اش را گوش کند.
  3. cook_meal: او باید برای مهمانی شب، غذا بپزد.

عملیات هریک از این توابع، به میزان duration ثانیه طول می‌کشد که مقدار آن در ورودی به آن تابع داده خواهد شد؛ مثلاً grow_plants(5) به این معنی است که آب دادن به گل‌ها، ۵ ثانیه طول خواهد کشید.

توابع بالا در پروژه‌ی اولیه پیاده‌سازی شده‌اند. از شما می‌خواهیم دو بخش از کد را تکمیل کنید.

🔹 تابع run_sequential این تابع را طوری تکمیل کنید که توابع طاها به‌طور ترتیبی و پشت سر هم اجرا شوند. در پایان این تابع، مجموع زمان اجرای آن چاپ می‌شود.

🔹 تابع run_threaded این تابع را طوری تکمیل کنید که زمان اجرای توابع طاها حداقل شود. در پایان این تابع، مجموع زمان اجرای آن چاپ می‌شود.

⚠️ نکته مهم: بخش‌هایی از کد که در اختیارتان قرار گرفته را تغییر ندهید و تنها بخش‌های مشخص‌شده را تکمیل کنید.

🎯 نمونه

ورودی

خروجی

💡 راهنمایی

برای پیاده‌سازی این تمرین، مراحل زیر را دنبال کنید:

۱. اجرای ترتیبی (run_sequential)

  • توابع را به‌ترتیب و پشت سر هم صدا بزنید.
  • زمان شروع و پایان را ثبت کنید.
  • مجموع زمان = جمع زمان هر سه تابع.

۲. اجرای موازی (run_threaded)

  • برای هر تابع، یک Thread ایجاد کنید.
  • همه‌ی تردها را با start() شروع کنید.
  • با join() منتظر اتمام همه‌ی تردها بمانید.
  • مجموع زمان = حداکثر زمان بین سه تابع (چون موازی اجرا می‌شوند).

💡 توضیح کد: run_sequential ← توابع را یکی پس از دیگری اجرا می‌کند. زمان کل = مجموع زمان‌ها. run_threaded ← برای هر تابع یک ترد ایجاد می‌کند و همه را با هم شروع می‌کند. زمان کل = حداکثر زمان بین سه تابع. استفاده از join() برای منتظر ماندن ترد اصلی تا اتمام همه‌ی تردها.

❌ اجرای ترتیبی زمان = مجموع زمان‌ها مثلاً ۴ + ۵ + ۶ = ۱۵ ثانیه ✅ اجرای موازی زمان = بیشترین زمان مثلاً max(۴, ۵, ۶) = ۶ ثانیه

⚠️ نکته مهم: در این تمرین، نیازی به دریافت ورودی از کاربر یا چاپ خروجی در کنسول ندارید. شما فقط باید توابع run_sequential و run_threaded را تکمیل کنید. توابع grow_plants، listen_to_music و cook_meal در پروژه پیاده‌سازی شده‌اند. بخش‌های کد که در اختیار شما قرار گرفته را تغییر ندهید.

✅ این تمرین را در ویرایشگر خود پیاده‌سازی کنید. به یاد داشته باشید که اجرای موازی با تردها زمان اجرا را به میزان قابل‌توجهی کاهش می‌دهد.

text
4 5 6
text
The plants are grown!
The music is played!
The meal is cooked!
Sequential execution time: 15.0 seconds
The plants are grown!
The music is played!
The meal is cooked!
Threaded execution time: 6.0 seconds
python
import time
from threading import Thread

def run_sequential(durations):
    start = time.time()

    # فراخوانی ترتیبی توابع
    grow_plants(durations[0])
    listen_to_music(durations[1])
    cook_meal(durations[2])

    end = time.time()
    print(f"Sequential execution time: {end - start:.1f} seconds")

def run_threaded(durations):
    start = time.time()

    # ایجاد تردها
    t1 = Thread(target=grow_plants, args=(durations[0],))
    t2 = Thread(target=listen_to_music, args=(durations[1],))
    t3 = Thread(target=cook_meal, args=(durations[2],))

    # شروع تردها
    t1.start()
    t2.start()
    t3.start()

    # منتظر ماندن برای اتمام تردها
    t1.join()
    t2.join()
    t3.join()

    end = time.time()
    print(f"Threaded execution time: {end - start:.1f} seconds")

نمونه‌ها

ورودی نمونه ۱
0.2 0.3 0.4
خروجی نمونه ۱
The plants are grown!
The music is played!
The meal is cooked!
Sequential execution time: 0.9 seconds
The plants are grown!
The music is played!
The meal is cooked!
Threaded execution time: 0.4 seconds
ورودی نمونه ۲
0.5 0.1 0.3
خروجی نمونه ۲
The plants are grown!
The music is played!
The meal is cooked!
Sequential execution time: 0.9 seconds
The music is played!
The meal is cooked!
The plants are grown!
Threaded execution time: 0.5 seconds
ورودی نمونه ۳
0 0 0
خروجی نمونه ۳
The plants are grown!
The music is played!
The meal is cooked!
Sequential execution time: 0.0 seconds
The plants are grown!
The music is played!
The meal is cooked!
Threaded execution time: 0.0 seconds

برای نوشتن پاسخ و دریافت امتیاز، ابتدا وارد حساب شوید.

ورود