我有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秒...
启动过程即使在现代操作系统上也很慢。计算1000平方根是在现代硬件上快速
要收获并行处理的好处,您必须花更多的时间在实际计算上,而不是开始工作。尝试计算更昂贵的东西,例如1000 bcrypt
s或慢速,例如击中1000个不同的URL。
使用计算密集型任务,每个过程都会吃100%CPU,没有比CPU核心更多的过程。