我在我的Python脚本中使用Joblib来缓存计算密集型函数的结果。该函数的输入参数和返回值是numpy数组。缓存对于单次运行我的Python脚本有效。现在,我想并行运行多个Python脚本以扫描实验中的某些参数。(函数的定义在所有运行中保持不变)。
是否有一种方法可以在并行运行的多个Python脚本之间共享Joblib缓存?这将节省许多在不同运行中重复但在单个运行中不重复的函数评估。我无法确定这是否在Joblib文档中可能。
指定一个共同的、固定的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
,那么通用函数调用就可以在那里被透明地缓存。
@mem.cache
,我想知道是否有理由将它们重构为推荐的替代方法。谢谢! - Kevin Ghaboosi@gen.coroutine
一样,如果获取任务比通常需要更长时间,并且该函数是从HTTP端点或延迟敏感的客户端调用的话,谢谢! - Kevin Ghaboosi@
符号只是第二种方法的简写版本。因此,第二种方法明确了装饰的含义,并且使您有可能不会失去原始的非装饰函数。在交互式会话中,由于名称更改,只有第二个选项适用的情况可能会出现。 - eickenberg
joblib.Memory
对象来实现。 - ali_mmem.cache
重复的功能,那么这应该可以直接使用。至少在一个具有多进程的机器上是可以的。但是在多个不共享磁盘空间的集群上是完全不同的事情。如果它们共享磁盘空间并且你把缓存放在那里,我不认为它不会工作。 - eickenberg