python-3.x - python - 多重函数的多重处理

假设我有100k个jsons,里面有很多数据,data_jsons是这些文件名的列表。

另外,假设我有3个功能: 1)upload_data() 2)data_preprocess_1() 3)data_preprocess_2()

这些函数可以分别为每个json调用,因此它们都是可并行的。

并行处理我的代码的最佳方法是什么?

(大致描述)如下:


import os


from multiprocessing import Pool



def upload_data():


...



def data_preprocess_1():


...



def data_preprocess_2():


...



if __name__ == '__main__':



 pool = Pool(processes=os.cpu_count()) 


 temp_1 = pool.map(upload_data, json_files)



 pool = Pool(processes=os.cpu_count()) 


 temp_2 = pool.map(data_preprocess_1, temp_1)



 pool = Pool(processes=os.cpu_count()) 


 final = pool.map(data_preprocess_2, temp_2)



但是据我了解,我将每个函数分别并行化,而我可以对所有函数一起使用,以避免将temp_1和temp_2与我的所有数据一起加载(这将消耗大量的内存)。


import os


from multiprocessing import Pool



def upload_data():


...



def data_preprocess_1():


...



def data_preprocess_2():


...



def data_all():


 upload_data()


 data_preprocess_1()


 data_preprocess_2()


...



if __name__ == '__main__':



 pool = Pool(processes=os.cpu_count()) 


 final = pool.map(data_all, data_jsons)



我还有其他的选择?

我所描述的选项有什么错误?

时间:

对于优化问题,要从基准测试开始。

也就是说,你肯定要有像data_all()这样的机制,而不是使用中间存储,多数情况下,主要问题是将对象从内存移动到另一个进程的内存里。

...