هلیا با مشکل کند بودن اجرای توابعش روبه‌رو شده‌است و می‌خواهد نتیجه‌ی اجرای توابع را برای مدتی در حافظه نگه دارد تا هربار که تابع را با همان ورودی‌های قبلی اجرا می‌کند، محاسبات تابع از نو اجرا نشوند. به او کمک کنید یک دکوراتور بنویسد که این کار را برای او انجام دهد.

دکوراتور شما (به نام conditional_cache) باید مدت زمان نگهداری نتایج، شرط نگهداری نتایج و بیشینهٔ حجم کش را ورودی بگیرد. در صورتی که شرط برقرار نبود، تابع موردنظر نباید اجرا شود. در غیر این صورت، اگر نتایج ذخیره‌شده منقضی نشده بودند، مقدار ذخیره‌شده برگردانده شود و در غیر این‌صورت تابع اجرا شود و مقدار جدید آن برگردانده شود.

همچنین برای جلوگیری از دسترسی هم‌زمان به مقادیر ذخیره‌شده و ایجاد Race Condition، باید دسترسی به این مقادیر محدود شود و در هر لحظه تنها یک امکان دسترسی به آن وجود داشته باشد.

نمونه

اجرا

import time
def is_positive(x):
    return x > 0

@conditional_cache(expiry=5, condition=is_positive)
def compute_square(x):
    print(f"Computing square of {x}")
    return x * x

print(compute_square(3))
time.sleep(2)
print(compute_square(3))
time.sleep(4)
print(compute_square(3))
print(compute_square(-3))
Python

خروجی

Computing square of 3
9
9
Computing square of 3
9
None
Plain text

پروژه‌ی اولیه

پروژه‌ی اولیه‌ی این سؤال را می‌توانید از این لینک دانلود کنید.

نحوه‌ی ارسال

این سؤال از نوع سؤالات تک‌فایل است. شما باید تابع conditional_cache موجود در فایل main.py را تکمیل و سپس این فایل را ارسال کنید.


ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.