我在课堂上使用这个 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
将 max 作为 arg 给装饰器似乎是明智的,例如:
@memoize(max=2000)
class Foo(object):
...