Задача: написать декоратор, который кэширует результат выполнения функции на опеределенное время (ttl). TTL задается в секундах (int).

Кеш хранит результат и срок годности для каждого набора аргументов. До истечения TTL результат возвращается из кеша, после — функция вызывается заново и запись обновляется.

Короткий ответ

Что ответить на собеседовании

Кеш хранит результат и срок годности для каждого набора аргументов. До истечения TTL результат возвращается из кеша, после — функция вызывается заново и запись обновляется.

Подробный разбор

Ответ с пояснениями

Условие

Задача: написать декоратор, который кэширует результат выполнения функции на опеределенное время (ttl). TTL задается в секундах (int).

  1. описать принципиальную схему работы этого кода со всеми возможными корнер-кейсами.
  2. (опционально) реализовать в коде

import time

реализация

pass

print(f"Func in cache: {}")

print(f"Time is valid: {}")

@ttl_cache(ttl=1) def multiplier(a, b, **kwargs): return a * b

print(f'now={time.time()}') print(f'result={multiplier(5, 5, x=1)}; time={time.time()}') print(f'result={multiplier(5, 5, x=1)}; time={time.time()}') print(f'result={multiplier(2, 5, x=1)}; time={time.time()}') time.sleep(2) print(f'result={multiplier(5, 5, x=1)}; time={time.time()}')

Ответ

Кеш хранит результат и срок годности для каждого набора аргументов. До истечения TTL результат возвращается из кеша, после — функция вызывается заново и запись обновляется.

Используйте монотонное время и явно выберите начало TTL, например завершение вычисления. В примере первый (5,5,x=1) — miss, второй — hit, (2,5,x=1) — другой ключ; после двух секунд первый ключ просрочен.

Обработайте положительный целый TTL, отсутствие записи отдельно от результата None, нехешируемые аргументы, исключения, изменяемые результаты и лимит памяти. Нормализация позиционных/именованных аргументов должна сохранять семантику функции, включая значимый порядок kwargs. Для конкуренции нужен singleflight или допустимость повторных вычислений; общий lock не держат на долгом вызове. Async-функциям требуется отдельная реализация.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее