小编典典

使@lru_cache忽略某些函数参数

python

如何使@functools.lru_cache装饰器忽略有关缓存键的某些函数参数?

例如,我有一个看起来像这样的函数:

def find_object(db_handle, query):
    # (omitted code)
    return result

如果我lru_cache像这样应用装饰器,db_handle它将包含在缓存键中。结果,如果我尝试使用相同query但不同的函数调用该函数db_handle,它将再次执行,这是我想避免的。我只想lru_cache考虑query论点。


阅读 226

收藏
2020-12-20

共1个答案

小编典典

使用cachetools可以编写:

from cachetools import cached
from cachetools.keys import hashkey

from random import randint

@cached(cache={}, key=lambda db_handle, query: hashkey(query))
def find_object(db_handle, query):
    print("processing {0}".format(query))
    return query

queries = list(range(5))
queries.extend(range(5))
for q in queries:
    print("result: {0}".format(find_object(randint(0, 1000), q)))
2020-12-20