Python多处理池制作参数列表的副本

时间:2019-03-05 18:44:16

标签: python python-3.x multiprocessing

我正在使用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)

1 个答案:

答案 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())) 是您的处理功能。