为什么在pool.map之前和之后减去time.time()值不能给出预期的时间?

时间:2019-07-27 13:45:54

标签: python time multiprocessing python-3.7 pool

我仍在尝试学习如何通过Python进行并行计算(在同一主题中,我还有其他一些问题)。在这里,我尝试以两种方式使用多重处理,池,ima​​p_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

0 个答案:

没有答案