避免多处理池的内存不足错误

时间:2016-09-22 14:35:34

标签: python multithreading memory multiprocessing

如何避免"内存不足"使用multiprocessing.Pool?

启动大量子进程时的异常

首先,我的程序将5GB文件加载到一个对象。接下来,并行处理运行,其中每个进程读取该5GB对象。

因为我的机器有超过30个内核,所以我想使用我的内核。但是,启动30个子流程时,会发生out of memory异常。

可能每个进程都有大型实例的副本(5GB)。总内存为5GB * 30核心= 150GB。这就是发生内存不足错误的原因。

我相信有一种解决方法可以避免此内存错误,因为每个进程只读取该对象。如果每个进程共享巨大对象的内存,那么只有5GB内存足以进行多处理。

请让我知道此内存错误的解决方法。

import cPickle
from multiprocessing import Pool
from multiprocessing import Process
import multiprocessing
from functools import partial

with open("huge_data_5GB.pickle", "rb") as f
    huge_instance = cPickle(f)

def run_process(i, huge_instance):
    return huge_instance.get_element(i)

partial_process = partial(run_process, huge_instance=huge_instance)

p = Pool(30) # my machine has more than 30 cores
result = p.map(partial_process, range(10000))

0 个答案:

没有答案
相关问题