我正在使用multiprocessing.Pool对象的map方法来处理很大的(> 2gb)参数列表。根据我运行脚本时的内存使用情况,每个工作程序似乎都在制作此列表的本地副本。因此,我使用的内存远远超过了应该使用的内存,那么应该使用什么来处理这种情况呢?
编辑:添加了用于说明的代码。我有数百个细胞成像数据的视频帧,并且正在使用斑点检测算法来识别其中心和半径。当然,这是一个令人尴尬的并行问题的例子。
frames = load_frames(file_vid)
with mp.Pool() as p:
cells = p.map(frame_cells, frames)
with open(file_cells, "wb") as f:
pk.dump(cells, f)
答案 0 :(得分:1)
您的问题是您一次加载所有帧。相反,您应该做的是逐帧加载并将它们馈送到new File("example/example/example").mkdirs()
中。这样,您的内存占用空间将保持很小,同时允许使用多处理。
下面是说明概念的代码:
false
用可以产生视频帧的代码替换imap
,而import multiprocessing as mp
import itertools
import time
def g():
for el in range(100):
yield el
def square(x):
return x*x
with mp.Pool() as pool:
r = list(pool.imap(square, g()))
是您的处理功能。