首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python lru_cache使用优化

Python lru_cache使用优化
EN

Stack Overflow用户
提问于 2016-08-05 16:11:18
回答 1查看 413关注 0票数 0

假设我有一个使用lru_cache缓存的方法

代码语言:javascript
复制
@lru_cache(maxsize=8)
def very_expensive_call(number):
    # do something that's very expensive
    return number

我称之为这样的方法:

代码语言:javascript
复制
print([very_expensive_call(i) for i in range(10)]) # call_1

由于缓存的maxsize为8,此时只缓存数字2-9。

在call_1之后,我正在做call_2:

代码语言:javascript
复制
print([very_expensive_call(i) for i in range(10)]) # call_2

在call_2期间,再次调用第一个数字0 (而不是在缓存中!),然后缓存数字0和3-9。然后调用number 1 (不在缓存中!)之后,数字0-1和4-9被缓存。好吧,你知道这是怎么回事:缓存从来没有用过.

我理解,对于这个特定的例子,我可以在range(...reverse(range(...之间交替使用,但是在一个更复杂的场景中,这可能是不可能的。

问题:是否可以检查缓存的数字并根据这些数字对调用进行排序?这样做的开销是多少?

EN

回答 1

Stack Overflow用户

发布于 2016-08-05 18:00:45

不,不,在lru中使用的lru是专为不面向公众而设计的。它的所有内部部件-- https://hg.python.org/cpython/file/3.5/Lib/functools.py#l411 --用于线程安全,并且如果实现发生变化,则为了不中断代码。

除此之外,我不认为将您的输入建立在缓存基础上是个好主意,您应该根据您的输入进行缓存。如果没有用相同的参数定期调用可调用的,那么缓存可能不是最好的选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38793633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档