在python作业库模块中直接使用MemmapingPool
在python作业库模块中直接使用MemmapingPool,python,multiprocessing,joblib,Python,Multiprocessing,Joblib,joblib模块提供了一个非常易于使用的函数Parallel,以简化编码。但是,它总是在您访问任何结果之前收集所有结果 我需要逐个处理结果,因为结果是占用大量内存的大数组。它们不能同时驻留在内存中。所以我需要先处理其中的一部分,然后丢弃。最初,我使用的是futures.as_completed方法,它来自MultiprocessPool,这样当结果可用时就可以立即处理 但是现在我还想使用joblib为我管理memmaped数组。joblib是否也有类似于MultiprocessPool的接口?我
joblib
模块提供了一个非常易于使用的函数Parallel
,以简化编码。但是,它总是在您访问任何结果之前收集所有结果
我需要逐个处理结果,因为结果是占用大量内存的大数组。它们不能同时驻留在内存中。所以我需要先处理其中的一部分,然后丢弃。最初,我使用的是futures.as_completed
方法,它来自MultiprocessPool
,这样当结果可用时就可以立即处理
但是现在我还想使用joblib
为我管理memmap
ed数组。joblib
是否也有类似于MultiprocessPool
的接口?我查看了一下代码,发现MemmapingPool
。但这些都不是关于如何使用它的文档和示例
我有以下问题:
多处理器池
相同Ctrl-C
在研究和阅读了joblib的源代码之后,我找到了一种方法,手动管理memmapped数组。已将代码段发布到 最简单的使用方法是通过
wrap
函数,该函数将自动检测memmap
并将其包装在SharedArray中。如果返回值是memmap,那么它也将被包装在SharedArray中。例如:
x = np.memmap('data', dtype=int, mode='w+', shape=100)
x[:] = np.random.randint(0, 100, 100)
with concurrent.futures.ProcessPoolExecutor(2) as pool:
fut1 = pool.submit(*wrap(np.multiply, x[:50], 2))
fut2 = pool.submit(*wrap(np.multiply, x[50:], -2))
print(fut1.result()) # or fut1.result().asarray() in case the function returns a memmap
print(fut2.result())