gpt4 book ai didi

python - joblib并行计算时间

转载 作者:太空宇宙 更新时间:2023-11-03 18:29:19 25 4
gpt4 key购买 nike

用于并行计算的 Joblib 对于 njob>1(njob=2 需要 12.6 秒完成)比 njob=1(1.3 秒完成)花费更多时间。我的系统是 mac OSX 10.9,内存为 16GB。我做错了什么吗?这是一个简单的演示代码:

from joblib import Parallel, delayed
def func():
for i in range(200):
for j in range(300):
yield i, j

def evaluate(x):
i=x[0]
j=x[1]
p=i*j
return p, i, j

if __name__ == '__main__':
results = Parallel(n_jobs=3, verbose=2)(delayed(evaluate)(x) for x in func())
res, i, j = zip(*results)

最佳答案

简短回答:Joblib 是一个多处理系统,为 3 个并发作业中的每一个启动新的 python 进程都会产生相当大的开销。因此,如果您添加更多作业,您的特定代码可能会变得甚至更慢

有一些关于此的文档 here .

解决方法并不好:

  1. 接受间接费用
  2. 不要使用并行代码
  3. 使用multithreading而不是多处理。不幸的是,除非您使用完全编译的函数来代替评估,否则多线程很少是一个选项,因为 python 几乎总是单线程的(请参阅 python GIL)。

也就是说,对于需要很长时间的函数,多处理通常是值得的。根据您的应用程序,这实际上是一个判断。请注意,函数中使用的每个变量都会复制到每个进程 - 变量复制在 python 中很少见,因此这可能会令人惊讶。因此,开销部分是显式或隐式传递的变量大小的函数(例如,通过使用全局变量)。

关于python - joblib并行计算时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22648464/

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