@jonghi

Как временно хранить кэш в python?

Добрый день. В общем возникла проблема и пока не могу найти нормального решения.

У меня есть функции, которые получают текущую комиссию за совершение операций. Эти функции используются в двух случаях: при старте скрипт просчитывает необходимые затраты для всех аккаунтов и в дальнейшем для совершения операции получает текущую комиссию.

Т.к. при изначальном расчете происходило очень много запросов, что нагружало как RPC, так и скрипт сам я сделал кеширование через lru_cache:
@lru_cache(maxsize=None)
def get_value_stg(from_chain, to_chain):
#...

@lru_cache(maxsize=None)
def get_value_harmony(from_chain):
#...


Но вот проблема: уже при работе непосредственно с каждым аккаунтом мне нужно получать только текущую стоимость комиссии, сейчас скрипт берет данные из кэша и из-за этого транзакции не проходят так. Как можно включать кэш функций только на время выполнения просчетов, а затем отключать его полностью? Расчеты происходят здесь:
for wallet in wallets_to_generate:
            path = generate()
  • Вопрос задан
  • 131 просмотр
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Реализуй кэш как отдельную функцию, самостоятельно или через functools.
def do_stuff_nocache(*args, **kwargs):
    ...

@lru_cache
def do_stuff(*args, **kwargs):
    return do_stuff_nocache(*args, **kwargs)


Ну или залезь в кишки lru_cache. Но это плохая идея, так как если ты уберешь декоратор, код сломается.
@lru_cache
def do_stuff(*args, **kwargs):
    ...


print(do_stuff.__wrapped__(*args, **kwargs))


Еще можно сделать do_stuff.clear_cache() но это очистит кэш вообще, что, скорее всего, нежелательно.
Ответ написан
Комментировать
@o5a
Больше похоже, что вам нужно использовать базу данных для хранения расчетов по каждому аккаунту.
Кэш функций хорош тогда, когда используются повторные обращения с одинаковыми параметрами вызова. Насколько я понял по описанию, вам нужно другое.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы