我仍在尝试学习如何通过Python进行并行计算(在同一主题中,我还有其他一些问题)。在这里,我尝试以两种方式使用多重处理,池,imap_unordered并测量处理计算所需的时间。在两种情况下,我得到的时间都不是预期值。
该示例只是对1到n之间的数字求和。对于n的一个选择(n = 10000000),无需并行计算即可完成此操作的时间为0.8秒。然后通过多处理和8个cpu,对于n的8个选择(n = 10000000,...,10000007)几乎是相同的(我等待看到结果的时间几乎是0.8秒)。但是,当我希望通过time.time()技巧报告此计算的时间时,我得到0.0或0.02秒!我尝试过的代码在下面。有人可以指导我我的代码有什么问题吗?还有一件事,我应该在哪里正确使用if __name__ == '__main__':
?多少次?
import time
def sumo(n):
sumor=0
for i in range(n):
sumor+=i
return(sumor)
x0=10000000
st=time.time()
x=sumo(x0)
st=time.time()-st
print(x,st)
if __name__ == '__main__':
import multiprocessing
pool=multiprocessing.Pool(multiprocessing.cpu_count())
nvec=[]
for i in range(8):
nvec.append(x0+i)
st=time.time()
sp=pool.imap_unordered(sumo,nvec)
st=time.time()-st
for i in sp:
print(i)
print(st)
运行代码后输出;
49999995000000 0.8040459156036377
49999995000000
50000005000000
50000015000001
50000035000006
50000045000010
50000065000021
50000055000015
50000025000003
0.0
第二次尝试;
import time
def sumo(n):
sumor=0
for i in range(n):
sumor+=i
return(sumor)
x0=10000000
st=time.time()
x=sumo(x0)
st=time.time()-st
print(x,st)
import multiprocessing
def sumoparallel(nvec):
pool=multiprocessing.Pool(multiprocessing.cpu_count())
return(pool.imap_unordered(sumo,nvec))
nvec=[]
for i in range(8):
nvec.append(x0+i)
if __name__ == '__main__':
st=time.time()
sp=sumoparallel(nvec)
st=time.time()-st
sq=[]
for i in sp:
sq.append(i)
print(sq,st)
运行代码后输出;
49999995000000 0.8280472755432129
[49999995000000, 50000015000001, 50000045000010, 50000055000015, 50000035000006, 50000005000000, 50000025000003, 50000065000021] 0.02500128746032715