تمرین ۱ – گرمکن هوشمند
کدی که در ادامه میبینید، سیستم خاموشی خودکار یک هیتر را شبیهسازی میکند. در این کد از time.sleep برای ایجاد وقفه ۵ ثانیهای استفاده شده است. اگر کد را اجرا کنید و قبل از اتمام زمان، سریعاً کلمه off را تایپ کنید تا هیتر دستی خاموش شود، متوجه یک باگ آزاردهنده میشوید: برنامه بلافاصله بسته نمیشود و سیستم تا پایان آن ۵ ثانیه گیر میکند (و در نهایت پیام خاموشی خودکار هم به اشتباه چاپ میشود!). هدف این تمرین این است که شما این مشکلِ درگیری منابع را برطرف کنید. وظیفه شما این است که ساختار این کد را تغییر دهید و به جای استفاده از Thread و time.sleep، از کلاس threading.Timer استفاده کنید؛ به طوری که اگر کاربر کلمه off را تایپ کرد، بتوانید زمانسنجِ پسزمینه را در همان لحظه لغو (Cancel) کنید تا برنامه فوراً و بدون هیچ معطلی پایان یابد
import threading
import time
def auto_off():
# Waiting for 5 seconds
time.sleep(5)
print("\n[System] Auto-off triggered.")
print("Heater is ON. It will auto-off in 5 seconds.")
# Start background thread
t = threading.Thread(target=auto_off)
t.start()
# Wait for user input
command = input("Type 'off' to turn it off manually: ")
if command == 'off':
print("User typed off. Exiting program...")
# BUG: The program will NOT exit immediately!
# Python will wait for the time.sleep(5) to finish.