2017-05-20 94 views
0
from math import sqrt 
from joblib import Parallel, delayed 
import time 

if __name__ == '__main__': 

    st= time.time() 
    #[sqrt(i ** 2) for i in range(100000)] #this part in non parellel 
    Parallel(n_jobs=2)(delayed(sqrt)(i ** 2) for i in range(100000)) 
    print time.time()-st 

现在非parelle部分在0.4秒运行而平行部分持续18秒运行..我感到困惑为什么会出现这种情况JOBLIB简单的例子平行例如大于简单慢

+0

您的问题是否已得到充分解决?如果不是,可以澄清什么?如果是这样,我鼓励你用旁边的复选标记标记正确的答案 - 这有助于整个社区。 –

回答

1

并行进程(其joblib创建)需要复制数据。试想一下:你有两个人,每个人都带着一块石头到他们的房子,照耀它,然后把它带回来。这比一个人在现场照亮他们的速度慢得多。

所有的时间都浪费在运输中,而不是花在实际计算上。您只会从并行流程中获益,以执行更多实质性的计算任务。


如果你关心加快这个具体操作: 使用numpy的矢量数学运算。在我的机器上,并行:1.13秒,串行:54.6毫秒,numpy:3.74毫秒。

a = np.arange(100000, dtype=np.int) 
    np.sqrt(a ** 2) 

不要担心像Cython或Numba这样的图书馆;他们不会加速这已经是高性能的操作。

+0

我可以在这个特定的例子中做任何事情来加速它吗?我的意思是你可以给我任何建议如何改变这个代码来获得明显的加速? – Soumya

+0

编辑我的答案与信息。 –