首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >joblib并行合成时间

joblib并行合成时间
EN

Stack Overflow用户
提问于 2014-03-25 23:26:45
回答 1查看 1.3K关注 0票数 2

njob>1 (njob=2完成了12.6s )比njob=1 (1.3s完成)占用了更多的时间用于并行计算。我在MacOSX10.9中,内存为16 am。我是不是搞错了?下面是一个简单的演示代码:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2014-04-06 21:40:05

简短的回答: jobs是一个多处理系统,在为您的3个同时作业启动一个新的python进程时有相当大的开销。因此,如果添加更多的作业,您的特定代码可能会变得更慢。

有一些关于这个这里的文档。

解决办法并不是什么好办法:

  1. 接受开销
  2. 不要使用并行代码
  3. 使用多线程而不是多处理。不幸的是,除非您使用完全编译的函数来代替计算,否则多线程很少是一种选择,因为python几乎总是单线程的(请参阅python )。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22648464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档