Python 多处理中的瓶颈。进程(或ProcessPoolExecutor)?

Python 多处理中的瓶颈。进程(或ProcessPoolExecutor)?,python,multiprocessing,overhead,Python,Multiprocessing,Overhead,我正在用python实现一个大型(2^(10~)x2^(10~)矩阵计算代码。 为了减少执行时间,我应用了多处理,如concurrent.futures.ProcessPoolExecutor和multiprocessing.Process 顺便说一下,我没有得到任何改善的结果。 我的意思是,单个进程代码完成计算的速度比并行代码快得多。 显然,这两种代码共享由kronecker乘积、矩阵乘法、矩阵向量乘法组成的核心计算功能 为了了解原因,我检查了每个部分的消耗时间,发现从每个子流程返回的结果支配

我正在用python实现一个大型(2^(10~)x2^(10~)矩阵计算代码。 为了减少执行时间,我应用了多处理,如concurrent.futures.ProcessPoolExecutor和multiprocessing.Process

顺便说一下,我没有得到任何改善的结果。 我的意思是,单个进程代码完成计算的速度比并行代码快得多。 显然,这两种代码共享由kronecker乘积、矩阵乘法、矩阵向量乘法组成的核心计算功能

为了了解原因,我检查了每个部分的消耗时间,发现从每个子流程返回的结果支配着执行时间

例如,我为矩阵计算创建了两个子进程。 在每个子流程中,只需0.5~0.6秒,但在主流程中,启动每个流程后,收集结果大约需要40秒

这是通过应用multiprocessing.Pipe而不是multiprocessing.Queue减少的时间。 当我以前使用Queue时,收集结果需要更长的时间

在每个子过程中创建的结果是一个2^10~x2^10~的大尺寸矩阵


在多处理代码中,加速数据返回部分的最佳方法是什么?

请共享您的代码,以便人们能够发现其瓶颈(如果有)。在任何类型的进程之间传输大量数据都需要一些时间。我看不出有这么多选择。也许您可以返回单个计算结果(浮点或整数)并直接写入共享字典?@RaJa我的代码通常返回大小为2^10~的向量。它比点运算花费的时间更长。从这篇文章开始,我最近测试了共享内存,期望返回结果的时间能显著缩短,但我不确定。。我还在测试。。一般情况下的方法。