多个进程共享一个Joblib缓存

Neh*_*kar 7 python caching numpy joblib

我正在使用Joblib在我的python脚本中缓存计算成本高昂的函数的结果.函数的输入参数和返回值是numpy数组.缓存适用于我的python脚本的单次运行.现在我想并行生成我的python脚本的多个运行,以便在实验中扫描一些参数.(函数的定义在所有运行中保持相同).

有没有办法在多个并行运行的python脚本之间共享joblib缓存?这将节省许多功能评估,这些功能评估在不同的运行中重复,但不会在单次运行中重复.我在Joblib的文档中找不到这是否可行

eic*_*erg 7

指定要使用的常用,修复cachedir和装饰要缓存的功能

from joblib import Memory
mem = Memory(cachedir=cachedir)

@mem.cache
def f(arguments):
    """do things"""
    pass
Run Code Online (Sandbox Code Playgroud)

或者干脆

def g(arguments):
   pass

cached_g = mem.cache(g)
Run Code Online (Sandbox Code Playgroud)

然后,即使您跨进程跨机器工作,如果程序的所有实例都可以访问cachedir,那么可以透明地缓存常用函数调用.

  • 实际上,我们(joblib开发团队)非常谨慎地设计基于磁盘的存储,使其对并行访问(主要是并行写入)具有可靠性.作为旁注,我倾向于在上面的答案中更喜欢第二种语法. (4认同)
  • @GaelVaroquaux 很久以后回复......当你说“主要是并行写入”时,“主要”是什么意思。有什么重要的陷阱吗?它们是否记录在某处?谢谢。 (2认同)