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现在,非平行部分运行0.4秒,并行部分运行18秒。我搞不懂为什么会发生这种事
发布于 2017-05-20 10:09:15
并行进程( joblib创建的进程)需要复制数据。想象一下:你有两个人每人把一块石头搬到自己的房子里,把它擦亮,然后把它拿回来。这比一个人当场照耀他们的速度要慢。
所有的时间都浪费在运输上,而不是花在实际的计算上。对于更实质性的计算任务,您只会从并行过程中获益。
如果您关心加速这个特定的操作:使用numpy的矢量化数学操作。在我的机器上,并行: 1.13,串行: 54.6 ms,numpy: 3.74 ms。
a = np.arange(100000, dtype=np.int)
np.sqrt(a ** 2)不要担心像Cython或Numba这样的库;它们不会加快这个已经执行的操作。
https://stackoverflow.com/questions/44084513
复制相似问题