[英]python memoization and memory leaks
我的目标是记住对象实例,这样只有一个对象具有相同的初始化参数。
我从这篇文章改编了一些代码,下面的代码起作用了。 基本上, memoize
是一个装饰器,用于缓存初始化参数。 下次使用相同的初始化参数时,将返回缓存的对象,而不是创建一个新的对象。
from functools import wraps
def memoize(function):
memo = {}
@wraps(function)
def wrapper(*args):
if args in memo:
return memo[args]
else:
rv = function(*args)
memo[args] = rv
return rv
return wrapper
@memoize
class Test(object):
def __init__(self, v):
self.v = v
class TT(object):
def __init__(self, v):
self.t = Test(v)
tests= [Test(1), Test(2), Test(3), Test(2), Test(4)]
for test in tests:
print test.v, id(test)
tt = TT(2)
print id(tt.t)
我得到了理想的结果
1 4355094288
2 4355094416
3 4355094544
2 4355094416
4 4355094672
4355094416
我的问题是,我需要手动清除缓存memoize.memo
吗? 似乎它将包含引用并阻止释放内存。 有没有办法使此资源发布更加自动化?
您可以使用lru / mru dict( https://github.com/amitdev/lru-dict )或使用时间限制的缓存对象。 这里有很棒的例子https://pythonhosted.org/cachetools/和这里限制python字典的大小 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.