هلیا با مشکل کند بودن اجرای توابعش روبهرو شدهاست و میخواهد نتیجهی اجرای توابع را برای مدتی در حافظه نگه دارد تا هربار که تابع را با همان ورودیهای قبلی اجرا میکند، محاسبات تابع از نو اجرا نشوند. به او کمک کنید یک دکوراتور بنویسد که این کار را برای او انجام دهد.
دکوراتور شما (به نام `conditional_cache`) باید مدت زمان نگهداری نتایج، شرط نگهداری نتایج و بیشینهٔ حجم کش را ورودی بگیرد. در صورتی که شرط برقرار نبود، تابع موردنظر نباید اجرا شود. در غیر این صورت، اگر نتایج ذخیرهشده منقضی نشده بودند، مقدار ذخیرهشده برگردانده شود و در غیر اینصورت تابع اجرا شود و مقدار جدید آن برگردانده شود.
همچنین برای جلوگیری از دسترسی همزمان به مقادیر ذخیرهشده و ایجاد *Race Condition*، باید دسترسی به این مقادیر محدود شود و در هر لحظه تنها یک امکان دسترسی به آن وجود داشته باشد.
# نمونه
## اجرا
```python
import time
def is_positive(x):
return x > 0
@conditional_cache(<mark title="نگهداری کش به مدت ۵ ثانیه">expiry=5</mark>, condition=is_positive)
def compute_square(x):
print(f"Computing square of {x}")
return x * x
print(compute_square(3))
<mark title="۲ ثانیه از زمان ذخیرهسازی">time.sleep(2)</mark>
print(compute_square(3))
<mark title="۶ ثانیه از زمان ذخیرهسازی">time.sleep(4)</mark>
print(compute_square(3))
print(compute_square(-3))
```
## خروجی
```
Computing square of 3
9
9
Computing square of 3
9
None
```
# پروژهی اولیه
پروژهی اولیهی این سؤال را میتوانید از [این لینک](/problemset/assignments/4367/download_problem_initial_project/251438/) دانلود کنید.
# نحوهی ارسال
این سؤال از نوع سؤالات تکفایل است. شما باید تابع `conditional_cache` موجود در فایل `main.py` را تکمیل و سپس این فایل را ارسال کنید.