gpt4 book ai didi

python - 为什么 python3 lru_cache 不提供放置和查询方法?

转载 作者:行者123 更新时间:2023-12-04 07:18:10 25 4
gpt4 key购买 nike

这是我的情况,is_exist功能有性能问题。

def is_exist(link :str) -> bool:
if query_db(link) is True:
return True
return False

def process(link: str)
if is_exist(link) is True:
return
# do something
# put result to database
LRU Cache 是一个很好的解决方案,但经过几个小时的努力,我发现 lru_cache 不符合我的要求。我想要这样的:
def is_exist(link :str) -> bool:
if query_db(link) is True:
return True
return False

def process(link: str)
if lru_cache.query(link) is True:
return

if is_exist(link) is True:
lru_cache.add(link)
return
# do something
# put result to database
functiontools 中的 LRU Cache 是一个装饰器。它没有查询方法。如果我使用 @lru_cache装饰 is_existis_exist时,某些链接会被重复处理返回假。
PS:将结果放入数据库是异步的

最佳答案

functools.lru_cache只缓存结果而不缓存异常。这意味着函数应该在以后必须重新评估的任何情况下引发异常。

@lru_cache
def is_exist(link: str) -> bool:
if query_db(link):
return True # added to cache
raise LookupError # ignored by cache
这允许客户端功能检查 - 使用缓存 - 但仍然插入丢失的条目。
def process(link: str)
try:
is_exist(link)
except LookupError:
# do something
# put result to database

关于python - 为什么 python3 lru_cache 不提供放置和查询方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68663883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com