我尝试使用多处理池包含两个for循环的简单python代码。
首先我设置pool = 1,总执行时间= 22211 ms。
而对于pool = 40,40个进程中每个进程的总执行时间为=
所需时间:24045,所需时间:24047,所需时间:24072,所需时间:24096,所需时间:24117,所需时间:24120,所需时间:24158,所需时间:24165,所需时间:24215,所用时间:24346,拍摄时间:24395,拍摄时间:24499,拍摄时间:24619,拍摄时间:24860,拍摄时间:27499,所需时间:31077,所需时间:32225,所需时间:33708,所需时间:37483,所用时间:37516,服用时间:37520,拍摄时间:37532,拍摄时间:37555,拍摄时间:37575,拍摄时间:37579,拍摄时间:37590,所需时间:37636,所需时间:37639,拍摄时间:37671,拍摄时间:37672,时间:37715,拍摄时间:37780,拍摄时间:37799,拍摄时间:37805,拍摄时间:37821,所需时间:37832,所需时间:37849,所需时间:37958,所需时间:38080,所用时间:38086(所有时间都在ms。)
系统信息:它是在具有超线程的56个CPU核心的机器上运行的。 我的代码是:
import time
from multiprocessing import Pool
def compute(da):
start_time = int(round(time.time() * 1000))
sum = 0
for i in range(10000):
for j in range(50000):
sum = sum + j
print (sum)
print ('Time taken: '+ str(int(round(time.time() * 1000))-start_time))
#start_time = int(round(time.time() * 1000))
data1 = ['1']
data40 = ['1','2','3','4','5','6','7','8','9','10','11','12,'13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38','39','40]
# FOR ONE PROCESS
p = Pool(1)
p.map(compute, data1)
# FOR 40 PROCESS
p = Pool(40)
p.map(compute, data40)
我们可以看到执行时间从24045(第一个过程)逐渐增加到38086(第40个过程)。
我想知道,为什么会这样? 提前谢谢。