[英]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.