在多处理池中共享大型对象

时间:2018-11-17 19:13:56

标签: python pandas multiprocessing

我正在尝试重新讨论this稍老的问题,看看这些天是否有更好的答案。

我正在使用python3,并且试图与池中的工作人员共享大型数据框。我的函数读取数据帧,使用数据帧中的数据生成新数组,然后返回该数组。下面的示例代码(注释:在下面的示例中,我实际上并没有使用数据框,但在我的代码中却使用了)。

def func(i):
    return i*2

def par_func_dict(mydict):

    values = mydict['values']
    df = mydict['df']

    return pd.Series([func(i) for i in values])

N = 10000
arr = list(range(N))
data_split = np.array_split(arr, 3)

df = pd.DataFrame(np.random.randn(10,10))

pool = Pool(cores)

gen = ({'values' : i, 'df' : df} 
       for i in data_split)

data = pd.concat(pool.map(par_func_dict,gen), axis=0)

pool.close()
pool.join()

我想知道是否有一种方法可以防止向生成器提供数据帧的副本,以防止占用太多内存。

上面链接的答案建议使用multiprocessing.Process(),但据我所知,很难在返回内容的函数(需要包含信号/事件)上使用它,并且注释表明每个进程最终仍会占用大量内存。

0 个答案:

没有答案