クラスでこの memoize デコレータを使用していますが、非常に効果的です。これで、その速度の一部をメモリ消費の制御と引き換えにする準備が整いました。理想的には、最大値を設定できます。(例: 2GB) しかし、試行錯誤を繰り返して、キャッシュ内のオブジェクトの最大数に落ち着くことができると思います。
これを行うための既製のコードを知っている人はいますか? キャッシュ内の最も古いものを捨てて、最新のものを追加すると思います。
または、これを行うためのより賢明な方法はありますか?
私が現在使用しているルーチンは次のとおりです。
def memoize(obj):
"""A decorator to cache advice objects using the advice key"""
cache = obj.cache = {}
@functools.wraps(obj)
def memoizer(*args, **kwargs):
key = args[0]
if key not in cache:
cache[key] = obj(*args, **kwargs)
return cache[key]
return memoizer
次のように最大値を引数としてデコレータに与えるのが賢明なようです:
@memoize(max=2000)
class Foo(object):
...