flo*_*urr 4 python caching python-3.x
我正在利用cachetools @ttl_cache装饰器(不是@cached)。我需要忽略缓存键中的一些参数。例如,。
@ttl_cache(maxsize=1024, ttl=600)
def my_func(foo, ignore_bar, ignore_baz):
# do stuff
Run Code Online (Sandbox Code Playgroud)
以这种方式工作,我得到了这个:
>>> my_func("foo", "ignore_bar", "ignore_baz") # cache miss
>>> my_func("foo", "ignore_bar", "ignore_baz") # cache hit
>>> my_func("foo", "ignore_bar_bar", "ignore_baz_baz") # cache miss!
Run Code Online (Sandbox Code Playgroud)
我需要的:
>>> my_func("foo", "ignore_bar", "ignore_baz") # cache miss
>>> my_func("foo", "ignore_bar", "ignore_baz") # cache hit
>>> my_func("foo", "ignore_bar_bar", "ignore_baz_baz") # cache hit!!!!!
Run Code Online (Sandbox Code Playgroud)
有没有办法使用它@ttl_cache?
好吧,这正是@cached它的自定义key参数的用途,所以我想知道为什么你想用@ttl_cache它:
from cachetools import TTLCache, cached
from cachetools.keys import hashkey
def mykey(foo, ignore_bar, ignore_baz):
return hashkey(foo)
@cached(cache=TTLCache(maxsize=1024, ttl=600), key=mykey)
def my_func(foo, ignore_bar, ignore_baz):
# do stuff
Run Code Online (Sandbox Code Playgroud)