Python 设置多处理程序会延长轻负载CPU限制时的执行时间吗?

Python 设置多处理程序会延长轻负载CPU限制时的执行时间吗?,python,numpy,python-multiprocessing,multicore,Python,Numpy,Python Multiprocessing,Multicore,我试图利用我的处理器的多核来加速NumPy计算,但是当设置多处理.Pool()时,代码会变慢,这是因为与设置线程的时间相比,负载很小吗 下面是我试图使用多处理来加速的代码: import multiprocessing as mps from time import time import matplotlib.pyplot as plt def f(x,y): return np.sin(x)+np.cos(y)-x*y if __name__=="__main__":

我试图利用我的处理器的多核来加速NumPy计算,但是当设置
多处理.Pool()
时,代码会变慢,这是因为与设置线程的时间相比,负载很小吗

下面是我试图使用
多处理来加速的代码:

import multiprocessing as mps
from time import time
import matplotlib.pyplot as plt

def f(x,y):
        return np.sin(x)+np.cos(y)-x*y

if __name__=="__main__":

    x = np.arange(-10,10,0.01); y = x
    with mps.Pool(4) as pool:
        start = time()
        x, y = pool.apply(np.meshgrid,(x,y))
        z = pool.apply(f,(x,y))
        plt.contour(x,y,z)
        print("Took: {} seconds".format(time()-start))
        plt.show()


使用
multiprocessing.Pool()
操作大约需要2.4秒,而不使用大约需要0.78秒。

Pool.apply()
阻塞直到结果准备就绪,因此您并不是真正进行并行处理,只是引入了开销。而且您的函数
f
非常短。因此,您不会看到多处理带来的任何好处,而只是增加了开销。使其更复杂或添加延迟以测试多处理。因此,我应该将
Pool.apply
替换为
Pool.map
Pool.apply_async
@RaJa是的,我也这么认为它很短,但我刚刚接触多处理并试图解决问题,您应该能够使用
apply\u async()
获得并发性
map\u async()
通常也是一个不错的选择,具体取决于您正在做什么。如果您试图找到答案,请不要开始计时。在开始优化以获得更好的时间性能之前,请尝试了解发生了什么。不幸的是,我没有使用
。相反,我手工做每件事。所以我真的帮不了你。