Joblib简单示例并行示例比简单慢

时间:2017-05-20 10:01:26

标签: python parallel-processing joblib

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秒..我很困惑为什么会发生这种情况

1 个答案:

答案 0 :(得分:1)

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

所有时间都在运输中浪费,而不是花在实际计算上。只有并行处理才能获得更多实质性的计算任务。

如果您关心加快此特定操作: 使用numpy的矢量化数学运算。在我的机器上,并行:1.13秒,串行:54.6毫秒,numpy:3.74毫秒。

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

不要担心像Cython或Numba这样的图书馆;他们不会加快这项已经开展的表现。