我正在尝试重新讨论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()
,但据我所知,很难在返回内容的函数(需要包含信号/事件)上使用它,并且注释表明每个进程最终仍会占用大量内存。