Wil*_*ill 7 python caching memory-management lru
我正在使用Python 3的内置functools.lru_cache装饰器来记忆一些昂贵的功能.我想在不使用太多内存的情况下记住尽可能多的调用,因为缓存太多的值会导致颠簸.
是否有一种首选的技术或库可以在Python中实现这一目的?
例如,这个问题引导我到Go库进行系统内存感知LRU缓存.类似Python的东西是理想的.
注意:我不能只估计每个值使用的内存并相应地设置maxsize,因为几个进程将并行调用修饰函数; 一个解决方案需要实际动态检查有多少内存是免费的.
我最终修改了内置lru_cache使用psutil.
修改后的装饰器带有一个额外的可选参数use_memory_up_to.如果设置,如果use_memory_up_to可用内存少于几个字节(根据psutil.virtual_memory().available),则缓存将被视为已满.例如:
from .lru_cache import lru_cache
GB = 1024**3
@lru_cache(use_memory_up_to=(1 * GB))
def expensive_func(args):
...
Run Code Online (Sandbox Code Playgroud)
注意:设置use_memory_up_to将导致maxsize无效.
这是代码: lru_cache.py