我正在运行此代码,并且似乎使用多过程运行脚本比通过一个过程运行它慢。
我做错了吗?
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
谢谢。
这是多处理优势的一个糟糕例子。很明显,您会花更多的时间在创建和启动每个过程上,而不是执行您的功能。多处理明智的话,如果您确实具有很大的耗时功能,因此将其放在单独的过程中。
您的时间不公平。list(map(gcd, numbers))
是一个过程中的操作,并且不会启动新的过程。
Pool
类代表一个工作过程池。
启动新过程比简单地执行list(map(gcd, numbers))
的速度慢,相对于list(map(...))
,Pool
中有很多事情要启动该过程。这几乎就像比较大象和猎豹的速度一样。