是否有为python建立的memoize on-disk装饰器?

sil*_*ado 6 python decorator memoization

我一直在寻找一个python模块,它提供了一个具有以下功能的memoize装饰器:

  • 将缓存存储在磁盘上以便在后续程序运行中重用.
  • 适用于任何可选择的参数,最重要的是numpy数组.
  • (Bonus)检查参数是否在函数调用中发生变异.

我发现了几个小的代码段用于这个任务,很可能实现一个自己,但我宁愿有一个既定的软件包这一任务.我也发现了incpy,但这似乎不适用于标准的python解释器.

理想情况下,我希望functools.lru_cache在磁盘上加上缓存存储.有人能指点我这个合适的套餐吗?

jco*_*ado 2

我不知道有哪个 memoize 装饰器可以处理这一切,但您可能想看看ZODB。它是一个构建在其之上的持久性系统,pickle提供了一些附加功能,包括能够在不使用对象时将对象从内存移动到磁盘以及仅保存已修改的对象的能力。

编辑:作为评论的后续行动。ZODB 不支持开箱即用的记忆化装饰器。不过,我认为你可以:

  • 实现你自己的持久化类
  • 在您需要的方法中使用记忆装饰器(任何标准实现都应该可以工作,但可能需要对其进行修改以确保设置了脏位)

之后,如果您创建该类的对象并将其添加到 ZODB 数据库,则当您执行其中一个 memoized 方法时,该对象将被标记为脏,并且更改将在下一个事务提交操作中保存到数据库中。