多处理映射比串行更长

时间:2018-04-05 14:44:02

标签: python multithreading multiprocessing

我有2个插槽,每个20个内核,所以我想加快一些进程。但是多进程总是比串行“方法”慢。这有什么理由吗?我不是这样做最有效的方式吗?是因为进程之间缺乏通信(管道或队列)?

import time
from multiprocessing import Pool
import numpy as np

#Classical approach by serial
startime = time.time()
def f(x):
    return np.sqrt(x)
f(np.arange(1000))
print("---%s seconds ---" % (time.time() - startime))

#Multiprocess test
startime = time.time()
if __name__ == '__main__':
    p = Pool(40)
    test = p.map(np.sqrt,np.arange(1000),chunksize=1)
print("---%s seconds ---" % (time.time() - startime))

----编辑---

使用并行我需要2.92秒并且连续我需要少1秒...

1 个答案:

答案 0 :(得分:1)

即使在现代操作系统上,启动过程也很慢。 在现代硬件上快速计算1000平方根 blazing

为了获得并行处理的好处,你必须花费更多的时间在实际计算上,而不是在开始时。尝试计算更昂贵的东西,比如1000 bcrypt s,或者慢一点,比如点击1000个不同的URL。

对于计算密集型任务,每个进程占用100%CPU,没有必要拥有比CPU核心更多的进程。