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
的行为可能与您预期的不同,请改用。