我正在运行这段代码,使用多进程运行脚本似乎比通过单进程运行脚本要慢。
我做错了什么吗?
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谢谢。
发布于 2017-06-25 02:11:37
这是多进程优势的一个坏例子。它显然会更慢,因为您在创建和启动每个进程上花费的时间比在执行函数上花费的时间更多。如果你有非常大的耗时的函数,那么多处理是明智的,所以你把它放在单独的进程中。
发布于 2017-06-25 02:40:47
你的时机不公平。list(map(gcd, numbers))是进程内操作,不会启动新进程。
Pool类表示一个工作进程池。
启动一个新进程比简单地执行list(map(gcd, numbers))要慢得多,相对于list(map(...))来说,在Pool中启动进程有很多事情要做。这几乎就像是比较大象和猎豹的速度。
https://stackoverflow.com/questions/44739465
复制相似问题