多个进程共享单个Joblib缓存
我在我的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
,那么常用的函数调用就可以在这个地方自动缓存起来。