我在课堂上使用这个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对象保存在内存中 –