Как исключить параметры при кэшировании вызовов функций с помощью DiskCache и memoize?

Я использую Python DiskCache и декоратор memoize для кэширования вызовов функций в базу данных статических данных.


from diskcache import Cache
cache = Cache("database_cache)

@cache.memoize()
def fetch_document(row_id: int, user: str, password: str):
    ...

Я не хочу, чтобы пользователь и пароль были частью ключа кеша.

Как исключить параметры из генерации ключа?


person Leevi L    schedule 07.05.2021    source источник
comment
на основе документации для memoize вы не можете исключить параметры. Вам придется написать собственный декоратор. Или внутри fetch_document используйте cache[row_id] = result с `if/else   -  person furas    schedule 07.05.2021


Ответы (1)


Документация для memoize не показывает возможность исключения параметры.

Вы можете попробовать написать собственный декоратор, используя исходный код< /а>.

Или используйте cache самостоятельно внутри fetch_document - что-то вроде этого

def fetch_document(row_id: int, user: str, password: str):
    if row_id in cache:
         return cache[row_id]

    # ... code ...
              
    # result = ...

    cache[row_id] = result

    return result              

ИЗМЕНИТЬ:

ИЛИ создайте кешированную версию вашей функции - вот так

def cached_fetch_document(row_id: int, user: str, password: str):
    if row_id in cache:
         return cache[row_id]

    result = fetch_document(row_id: int, user: str, password: str)

    cache[row_id] = result

    return result              

и позже вы можете решить, хотите ли вы использовать cached_fetch_document вместо fetch_document

person furas    schedule 07.05.2021
comment
Я не знал, что могу напрямую разговаривать с тайником. Я думал, что мне нужно использовать декоратор. Это делает жизнь намного проще. Я могу рассматривать cache как словарь, хранящийся в файле. Кажется, что такие параметры, как expire, которые я обычно передаю декоратору @cache.memoize, можно установить с помощью cach.set(expire) - person Leevi L; 08.05.2021