我在課堂上使用這個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
似乎是合理的給予最高爲ARG像裝飾:
@memoize(max=2000)
class Foo(object):
...
如果您的對象具有不同的大小,那麼可能很難估計緩存佔用的內存空間。如果你不能指望最後使用的對象可能會被重用,那麼最好的策略可能是將第一個xxx對象保存在內存中 –