Context manager `timer()`
เพื่อนร่วมงานของคุณกำลังพัฒนาเว็บเซอร์วิสที่ประมวลผลภาพจาก Instagram ลูกค้าร้องเรียนว่าระบบใช้เวลานานเกินไปในการตรวจสอบว่าภาพมีแมวอยู่หรือไม่ เพื่อนร่วมงานจึงขอความช่วยเหลือจากคุณ คุณจึงตัดสินใจเขียน context manager สำหรับจับเวลาการทำงานของฟังก์ชันต่าง ๆ
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การเขียนฟังก์ชันใน Python
คำแนะนำการฝึกหัด
- เพิ่ม decorator จากโมดูล
contextlibให้กับฟังก์ชันtimer()เพื่อให้ทำงานเป็น context manager - ส่งการควบคุมจากฟังก์ชัน
timer()ไปยัง context block
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Add a decorator that will make timer() a context manager
@contextlib.____
def timer():
"""Time the execution of a context block.
Yields:
None
"""
start = time.time()
# Send control back to the context block
____
end = time.time()
print('Elapsed: {:.2f}s'.format(end - start))
with timer():
print('This should take approximately 0.25 seconds')
time.sleep(0.25)