Лайфхак: functools.lru_cache для ускорения Python

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

pythonlru_cacheкэширование

ℹ️ Если у вас есть часто вызываемая функция с одними и теми же аргументами, её можно кэшировать без переписывания кода.

👨‍💻 1. Пример: безумно дорогая операция

import time

def slow_function(n):
    time.sleep(2)  # Имитация долгого вычисления
    return n * n

print(slow_function(10))  # Ждём 2 секунды
print(slow_function(10))  # Ждём 2 секунды снова 

❔ Каждый вызов делает одно и то же, но заново.

2. Используем lru_cache – и магия!

from functools import lru_cache
import time

@lru_cache(maxsize=None)  # Кэшируем бесконечно много вызовов
def fast_function(n):
    time.sleep(2)
    return n * n

print(fast_function(10))  # Ждём 2 секунды
print(fast_function(10))  # Моментально! 

ℹ️ Как это работает?

  • lru_cache запоминает аргументы функции и её результат.
  • Если вызов повторяется – результат берётся из памяти, а не вычисляется заново.
  • Ускорение может быть огромным при повторных запросах в базу, обработке данных и т. д.

Бонус: сброс кэша на лету

Иногда кэш нужно очистить, например, при изменении данных:

fast_function.cache_clear()

Когда использовать?

  • Когда функция часто вызывается с одними и теми же аргументами.
  • Когда вычисления дорогие (например, работа с API или сложная математика).
  • Когда нет критической необходимости в актуальности данных (старые значения могут оставаться в кэше).

✳️ Этот трюк может дать моментальный прирост скорости без изменения логики кода.

tags: #полезно #разработка #python

🧭 @recura_tech

Скриншот тёмной темы редактора с фрагментом кода Python: пример использования functools.lru_cache и два вызова функций для демонстрации кэша.
Скриншот кода с примером использования functools.lru_cache в Python

Читайте так же