Python 多进程输出比单进程慢
我正在运行这段代码,使用多个进程运行脚本似乎比通过单个进程运行要慢 我做错什么了吗Python 多进程输出比单进程慢,python,multiprocessing,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
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
多谢各位 这是多处理优势的一个坏例子。很明显,创建和启动每个进程的时间要比执行函数的时间长,所以速度会慢。如果你有一个非常耗时的函数,那么多处理是明智的,所以你把它放在单独的进程中。这是多处理优势的一个坏例子。很明显,创建和启动每个进程的时间要比执行函数的时间长,所以速度会慢。如果你有一个非常耗时的函数,那么多处理是明智的,所以你把它放在单独的进程中。你的时间安排是不公平的<代码>列表(映射(gcd,编号))是一个进程内操作,不会启动新进程
Pool
类表示工作进程池
相对于
list(map(…)
,池
中有太多的事情在启动流程,启动一个新流程从直觉上来说比简单地执行list(map(gcd,numbers))
要慢。这几乎就像比较大象和猎豹的速度 你的时机不公平<代码>列表(映射(gcd,编号))是一个进程内操作,不会启动新进程
Pool
类表示工作进程池
相对于
list(map(…)
,池
中有太多的事情在启动流程,启动一个新流程从直觉上来说比简单地执行list(map(gcd,numbers))
要慢。这几乎就像比较大象和猎豹的速度 谢谢。他们在“高效Python”中使用了类似的示例(但代码似乎已经过时,来自concurrent.futures import ProcessPoolExecutor
),作者通过多处理获得了更快的结果(几乎是2倍),所以我很困惑。如果列表中有4个元素,为什么只创建3个进程池?我在测试不同的进程,看看它有多大影响。我也试了4个。我会更新的。谢谢。他们在“高效Python”中使用了类似的示例(但代码似乎已经过时,来自concurrent.futures import ProcessPoolExecutor
),作者通过多处理获得了更快的结果(几乎是2倍),所以我很困惑。如果列表中有4个元素,为什么只创建3个进程池?我在测试不同的进程,看看它有多大影响。我也试了4个。我将更新。time.time
的行为可能与您预期的不同,请改用。time.time
的行为可能与您预期的不同,请改用。