多处理池示例(并行)比顺序慢。试图理解python中的池

时间:2016-07-03 00:06:54

标签: python performance multiprocessing

我一直在阅读并试图了解如何通过多处理更快地运行python。我找到了这个例子:Russia's Military Just Bought Five Bottlenose Dolphins and It Won't Say Why

然后我做了这个测试并在一个有8个内核的服务器上运行。

Pool

但是,使用Sequential run time: 0.13 seconds Parallel run time: 0.98 seconds

时效果较慢

输出

{
"scope": "read_write" 
"stripe_user_id": "acct_xxxxxxxxx", 
"stripe_publishable_key": "pk_test_xxxxxxxxxxx", 
"token_type": "bearer", 
"refresh_token": "rt_xxxxxxxxxxxxxx", 
"livemode": false, 
"access_token": "sk_test_xxxxxxxxxxxxxxxx", 
}

我做错了什么? 感谢

1 个答案:

答案 0 :(得分:2)

你没有做错任何事情,除了可能运行的程序超过你运行它们的物理核心 - 无法从这里猜出你是否拥有< / em>至少有8个核可用于运行您创建的8个进程。

但即使你这样做,计算一个f(x)结果所花费的时间与将参数传递给工作进程并将结果从工作进程传递回来的所有开销相比微不足道 - f()做的很少。 IPC(进程间通信)并不便宜。

这就是为什么文档反复强调尽可能少做IPC的原因。如果每个函数调用完成的有用工作量很小,那么你不会获得任何整体加速(相反,正如你所发现的那样)。

顺便说一下,这个:

[x for x in range(1000000)]

写得更好:

range(1000000)

尽管做出这样的改变对这里的真实点没有任何影响。