我正在使用Python multiprocessing,更准确地说
from multiprocessing import Pool
p = Pool(15)
args = [(df, config1), (df, config2), ...] #list of args - df is the same object in each tuple
res = p.map_async(func, args) #func is some arbitrary function
p.close()
p.join()
这种方法会消耗大量内存,几乎占用了我所有的RAM(在这一点上,速度变得极慢,因此多进程基本上是无用的)。我认为问题出在df
是一个大对象(一个大型pandas dataframe),每个进程都要复制一份。我尝试使用multiprocessing.Value
来共享数据框而不进行复制。
shared_df = multiprocessing.Value(pandas.DataFrame, df)
args = [(shared_df, config1), (shared_df, config2), ...]
根据 Python multiprocessing shared memory 建议,我使用了 multiprocessing.Value
,但是出现了 TypeError: this type has no size
错误(与 Sharing a complex object between Python processes? 相同,不幸的是,我不理解这个答案)。 这是我第一次使用多进程,也许我的理解还不够好。在这种情况下,multiprocessing.Value
真的是正确的使用方式吗?我已经看到了其他建议(例如队列),但现在有点困惑。有哪些共享内存的选项,在这种情况下哪一个是最好的?
Namespace
仍然是最好的方法?你最终是如何解决的@Anne - David