多处理输出比单个进程慢

时间:2017-06-24 18:08:50

标签: python multiprocessing

我正在运行此代码,似乎使用多进程运行脚本比通过单个进程运行它更慢。

我做错了吗?

from time import time
numbers = [(1963309, 2265973), (2030677, 3814172),
           (1551645, 2229620), (2039045, 2020802)]
start = time()
results = list(map(gcd, numbers))
print(results)
end = time()


print('time is %.3f'%(end - start))

from multiprocessing import Pool


if __name__ == '__main__':
    start = time()
    with Pool(4) as p:
      print(p.map(gcd, numbers))
    end = time()
    #print('time is %.3f'%(end - start))
    print('Took %.3f seconds' % (end - start))

输出

[1, 1, 5, 1]   # single process
time is 0.444
[1, 1, 5, 1]   #multi-processes
Took 0.751 seconds

谢谢。

2 个答案:

答案 0 :(得分:3)

这是多处理优势的一个不好的例子。显然会更慢,因为你花在创建和启动每个进程上的时间比执行函数要多。如果您有非常耗时的功能,那么多处理是合理的,因此您可以将它放在单独的过程中。

答案 1 :(得分:0)

你的时机不公平。 list(map(gcd, numbers))是一个进程内操作,并不会启动新进程。

  

Pool类表示工作进程池。

开始一个新流程比简单地执行list(map(gcd, numbers))要慢得多,相对于list(map(...))Pool进行了很多工作以启动流程。这几乎就像比较大象和猎豹的速度。