本文介绍了带有实例方法的Python函数工具lru_cache:Release对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!
问题描述
如何在不泄漏内存的情况下在类内使用functools.lru_cache
?
在下面的最小示例中,foo
实例将不会被释放,尽管它超出作用域并且没有引用对象(除lru_cache
以外)。
但是foo
,因此foo.big
(aBigClass
)仍然有效
这意味着Foo
/BigClass
实例仍驻留在内存中。即使删除Foo
(delFoo
)也不会释放它们。
为什么lru_cache
要保留实例?缓存不是使用某些哈希而不是实际对象吗?
建议在类内使用lru_cache
的方式是什么?
我知道两种解决方法: Use per instance caches或make the cache ignore object(但可能导致错误结果)
推荐答案
这不是最干净的解决方案,但对程序员完全透明:
它采用与lru_cache
完全相同的参数,并且工作方式完全相同。但是,它从不将self
传递给lru_cache
,而是使用每个实例的lru_cache
。
这篇关于带有实例方法的Python函数工具lru_cache:Release对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!
本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!