کمبود وقت
سه تابع طاها بالای کد تو آماده است. در داوری، زمان هر کار کسری از ثانیه است (مثلاً
0.2 0.3 0.4) تا داوری طول نکشد؛ منطق همان است که در نمونه آمده.
طاها میخواهد کارهای زیادی را انجام دهد اما وقت کافی برای آنکه همهی آنها را بهترتیب انجام دهد، ندارد. او از شما میخواهد کمکش کنید کارهایش را بهصورت موازی پیش ببرد تا در حداقل زمان ممکن، همهی آنها به پایان برسند.
طاها سه کار برای انجام دارد که اولویت انجام آنها به این ترتیب است:
grow_plants: او باید گل و گیاههایش را آب دهد.listen_to_music: او میخواهد آهنگهای جدید خوانندهی موردعلاقهاش را گوش کند.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در پروژه پیادهسازی شدهاند. بخشهای کد که در اختیار شما قرار گرفته را تغییر ندهید.✅ این تمرین را در ویرایشگر خود پیادهسازی کنید. به یاد داشته باشید که اجرای موازی با تردها زمان اجرا را به میزان قابلتوجهی کاهش میدهد.
4 5 6
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
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
برای نوشتن پاسخ و دریافت امتیاز، ابتدا وارد حساب شوید.
ورود