0
說我有這個方法,我的緩存使用lru_cache
:Python的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(...
之間,但在更復雜的場景,也許不可能的交替。
問題:是否有可能檢查哪些數字被緩存並根據該數字進行調用?這會產生什麼樣的開銷?
感謝您的回答。我知道它違背了lru_cache哲學。我認爲這對我來說更像是一個優化問題:遇到這個問題時,當我發現我只是反覆地調用了一個方法而只是多了一些不同的參數,我的maxsize和突然緩存就不再使用了。可能會隨着最大化的增加而回落。 –