Python lru_cache使用优化

时间:2016-08-05 16:11:18

标签: python python-3.x caching optimization

假设我使用lru_cache缓存此方法:

@lru_cache(maxsize=8)
def very_expensive_call(number):
    # do something that's very expensive
    return number

我这样称呼这个方法:

print([very_expensive_call(i) for i in range(10)]) # call_1

因为缓存的maxsize是8,所以此时仅缓存数字2-9。

在call_1之后,我正在做call_2:

print([very_expensive_call(i) for i in range(10)]) # call_2

在call_2期间,再次调用第一个数字0(不在缓存中!),然后缓存数字0和3-9。 然后调用数字1(不在缓存中!),然后缓存数字0-1和4-9。 好吧,你看到它的发展方向:缓存永远不会被使用......

我理解,对于这个具体示例,我可以在range(...reverse(range(...之间切换,但在更复杂的情况下,这可能是不可能的。

问题:是否可以检查缓存了哪些号码并根据该号码订购了这些号码?会有什么开销呢?

1 个答案:

答案 0 :(得分:1)

不,不,cache中使用的lru专门设计为不面向公众。它的所有内部are encapsulated用于线程安全,并且如果实现发生更改,则不会破坏代码。

除此之外,我不认为基于缓存建立输入是个好主意,您应该根据您的输入进行缓存。如果不使用相同的参数定期调用callable,则缓存可能不是最佳选择。

相关问题