我正在运行此代码,似乎使用多进程运行脚本比通过单个进程运行它更慢。
我做错了吗?
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
谢谢。
答案 0 :(得分:3)
这是多处理优势的一个不好的例子。显然会更慢,因为你花在创建和启动每个进程上的时间比执行函数要多。如果您有非常耗时的功能,那么多处理是合理的,因此您可以将它放在单独的过程中。
答案 1 :(得分:0)
你的时机不公平。 list(map(gcd, numbers))
是一个进程内操作,并不会启动新进程。
Pool
类表示工作进程池。
开始一个新流程比简单地执行list(map(gcd, numbers))
要慢得多,相对于list(map(...))
,Pool
进行了很多工作以启动流程。这几乎就像比较大象和猎豹的速度。