gpt4 book ai didi

python - 顺序处理比池处理更快

转载 作者:行者123 更新时间:2023-11-30 23:04:38 24 4
gpt4 key购买 nike

我试图理解mapmultiprocessing的使用。为此,我编写了以下 python 程序。但结果似乎让我感到困惑。

from multiprocessing import Pool                                                                                                                                                                             
import time

def f(x):
return x*x

if __name__ == '__main__':
p = Pool(5)
l = [x for x in range(2000000)]
start = time.clock()
p.map(f, l)
end = time.clock()
print('pool processing time {}'.format(end - start))
start = time.clock()
map(f, l)
end = time.clock()
print('sequential processing time {}'.format(end - start))

我得到的输出如下所示。

  pool processing time 5.576627
sequential processing time 3.220387

为什么顺序处理时间大于池处理时间?我在分配有两个 CPU 的 Linux(Ubuntu 14.04 VM)上运行此代码。

最佳答案

您的函数 f 太简单,无法在这里受益。

多处理的工作方式是剥离整个 Python 程序的副本。如果您的系统有多个 CPU,则这些副本可以在单独的 CPU 上并行运行。您可以将它们视为某种主/从安排,原始 Python 程序是 CPU A 上的主程序,而一些从程序(在本例中为 5 个)位于 CPU B 到 F 上。(它们不 < em>必须有这种主从关系,但我认为大多数人发现这样思考更容易。)

然后,每当您的主设备请求一些从设备端计算时,主设备就会打包参数值(使用 pickle)并将它们发送到从设备。1从机执行请求的计算,pickle得到答案,并将其发送回主机。

在您的情况下,参数是列表中的每个值(加上要调用的函数,请参阅脚注),结果是列表中值的平方。打包和解包值所需的时间比计算所需的时间要长得多,因此这是净损失。

如果您进行更多计算(与基本通信开销相比),您可能会看到净胜,但如果只有两个 CPU,则创建一个大池会适得其反。

<小时/>

1调用的函数也通过 pickle 进行封装。

关于python - 顺序处理比池处理更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33598448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com