【发布时间】:2014-06-22 00:55:56
【问题描述】:
我正在使用 Python 3 的内置 functools.lru_cache 装饰器来记忆一些昂贵的功能。我想在不使用太多内存的情况下记住尽可能多的调用,因为缓存太多的值会导致抖动。
是否有首选的技术或库可以在 Python 中完成此任务?
例如,this question 将我带到 system memory aware LRU caching 的 Go 库。对 Python 来说类似的东西是理想的。
注意:我不能只估计每个值使用的内存并相应地设置maxsize,因为多个进程将并行调用修饰函数;解决方案需要实际动态检查有多少可用内存。
【问题讨论】:
-
如果您还没有找到可以做到这一点的东西,您可以尝试利用 psutil (code.google.com/p/psutil) 自行开发。
-
是的,这就是我现在正在研究的内容——事实上,您是否知道如何找到 Python 3 的
lru_cache实现的源代码?最简单的方法是简单地检查装饰器中的内存使用情况。这肯定会增加一些开销,但在这个应用程序中,我认为这不会很重要。 -
-
或本地:启动交互式 Python 解释器
import functools并输入模块名称functools。适用于任何定位几乎所有 Python 模块的源代码(当然 C 扩展除外)。 -
@Will BTW,
functools.lru_cache是由 Raymond Hettinger 编写的。他发布了几个不同的(LRU)缓存/记忆recipes,也许你可以在其中找到一些有用或至少鼓舞人心的东西;-)
标签: python caching memory-management lru