【发布时间】:2016-12-12 03:05:36
【问题描述】:
假设我有这个方法,我使用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
由于缓存的最大大小为 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(... 之间切换,但在更复杂的情况下这可能是不可能的。
问题:是否可以检查缓存了哪些号码并据此对呼叫进行排序?这样做的开销是多少?
【问题讨论】:
标签: python python-3.x caching optimization