我正确计算执行时间吗?如果是这样,则并行处理需要更长的时间。这看起来很古怪

时间:2016-12-31 20:40:04

标签: python matplotlib time parallel-processing

这是我的并行处理代码,我在Python中比较并行代码和同一任务的线性代码的运行时间。我得到并行代码的输出时间在每次运行中更多。这完全出乎意料。为什么会这样?怎么了?

from multiprocessing import Pool
import matplotlib.pyplot as plt
import numpy as np
import time

def scatter_join(args):
    plt.scatter(s=1,*args)
    plt.savefig('test_p.png')


if __name__ == '__main__':
    p = Pool()
    snap = np.random.randint(0,20,(100000,2))
    task = [(snap[:,0],snap[:,1])]
    t = time.time()
    p.map(scatter_join,task)
    p.close()
    p.join()
    print('Time Elapsed(Parallel): ', abs((time.time()-t)))

plt.clf()
t = time.time()
plt.scatter(snap[:,0],snap[:,1],s=1)
plt.savefig('test_l.png')
print('Time Elapsed(Linear): ',abs(time.time()-t))

1 个答案:

答案 0 :(得分:1)

并不保证并行代码比单个线程更快。它可以加速或减速工作负载。

如果代码的序列(即不可并行)部分的百分比太高,那么在算法并行化方面你将看不到多少好处。

从这里看起来,您的工作量(单个matplotlib图?)不会从并行执行中受益。

也可能想看看这个:

Python Multiprocessing with Matplotlib

输出

经过的时间(平行):1.8148565292358398

经过的时间(线性):0.17187786102294922