多个进程共享单个Joblib缓存

11 投票
1 回答
3453 浏览
提问于 2025-04-18 15:18

我在我的Python脚本中使用Joblib来缓存一个计算量很大的函数的结果。这个函数的输入参数和返回值都是numpy数组。缓存对于我单次运行Python脚本时效果很好。现在我想同时启动多个Python脚本来进行实验,目的是测试一些参数。(这个函数在所有运行中定义都是一样的。)

有没有办法让多个同时运行的Python脚本共享Joblib的缓存呢?这样可以节省很多重复的函数计算,因为这些计算在不同的运行中会重复,但在单次运行中不会。我在Joblib的文档中没有找到相关的信息。

1 个回答

14

指定一个公共的、固定的 cachedir 目录,然后用下面的方式来装饰你想要缓存的函数:

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

@mem.cache
def f(arguments):
    """do things"""
    pass

或者简单地使用:

def g(arguments):
   pass

cached_g = mem.cache(g)

这样,即使你在不同的进程或者不同的机器上工作,只要你程序的所有实例都能访问到 cachedir,那么常用的函数调用就可以在这个地方自动缓存起来。

撰写回答