は私がlru_cache
を使用してキャッシュこのメソッドを持っていると言う:Pythonのlru_cache使用量の最適化
@lru_cache(maxsize=8)
def very_expensive_call(number):
# do something that's very expensive
return number
私はこのように、このメソッドを呼び出しています:キャッシュのMAXSIZEが8であるためにのみ、
print([very_expensive_call(i) for i in range(10)]) # call_1
この時点で番号2〜9がキャッシュされます。
print([very_expensive_call(i) for i in range(10)]) # call_2
がcall_2の間に、再び最初の数0
は(キャッシュしないで!)と呼ばれ、その数字の後に0と3-9がキャッシュされています。call_1後
、私はcall_2をしています。 その後、番号1
が呼び出され(キャッシュにはありません!)、その後に番号0-1と4-9がキャッシュされます。 これが起こっている場所まあ、あなたを参照してください:キャッシュが使用されることはありません...
私はこの特定の例のために、私はrange(...
とreverse(range(...
の間でおそらくことはできませんより複雑なシナリオで交互にできることを理解しています。
質問:どの番号がキャッシュされているか検査し、それに基づいて通話を注文することは可能ですか?これにはどのようなオーバーヘッドがありますか?
お返事ありがとうございます。私はそれがlru_cacheの哲学に反していることを知っている。私はそれが私の場合の最適化の問題だと思う:私は私がmaxsizeと突然キャッシュはもはや使用されていないもう少し異なる引数で繰り返しメソッドを呼び出していることを発見したときにこの問題に出くわしました。おそらく最大サイズの増加に後退します。 –