delay()函数的作用(与Python中的joblib一起使用时)

orrymr:

我已经阅读了文档,但是我不明白这是什么意思:The delayed function is a simple trick to be able to create a tuple (function, args, kwargs) with a function-call syntax.

我正在使用它遍历要操作的列表(allImages),如下所示:

def joblib_loop():
    Parallel(n_jobs=8)(delayed(getHog)(i) for i in allImages)

这将返回我的HOG功能,如我所愿(以及使用所有8个内核的速度增益),但是我不确定它的实际作用。

我的Python知识充其量是不错的,而且我很可能缺少一些基本知识。任何朝着正确方向的指针将不胜感激

Nearoo:

如果我们看看如果简单地写的话会发生什么,也许事情变得更清楚了。

Parallel(n_jobs=8)(getHog(i) for i in allImages)

在这种情况下,可以更自然地表示为:

  1. 创建一个Pararell实例n_jobs=8
  2. 创建列表 [getHog(i) for i in allImages]
  3. 将该列表传递给Parallel实例

有什么问题?到列表传递给Pararell对象时,所有getHog(i)调用都已返回-因此,可以并行执行的任何内容!所有工作已经按顺序在主线程中完成。

我们真正想要的是告诉Python我们要使用什么参数调用哪些函数,而无需实际调用它们 -换句话说,我们想延迟执行。

这是delayed方便我们使用清晰的语法进行的操作。如果我们想告诉Python我们foo(2, g=3)以后要调用它,我们可以简单地编写delayed(foo)(2, g=3)返回的元组(foo, [2], {g: 3})包含:

  • 我们要调用函数的引用,例如foo
  • 不带关键字的所有参数(简称“ args”),例如egt2
  • 所有关键字参数(简称“ kwargs”),例如g=3

因此,通过编写Parallel(n_jobs=8)(delayed(getHog)(i) for i in allImages),而不是上面的序列,现在发生以下情况:

  1. Pararell具有n_jobs=8创建实例

  2. 名单

    [delayed(getHog)(i) for i in allImages]
    

    被创建,评估为

    [(getHog, [img1], {}), (getHog, [img2], {}), ... ]
    
  3. 该列表被传递给Parallel实例

  4. Parallel实例创建8个线程,并将列表中的元组分配给它们

  5. 最后,这些线程中的每个线程都开始执行元组,即,它们调用第一个元素,而第二个和第三个元素作为参数打包tup[0](*tup[1], **tup[2]),将元组变回我们实际打算执行的调用getHog(img2)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

与popen python一起使用时,输入命令似乎不起作用

与IntervalObservable一起使用时,“ takeWhile不是函数”

与'as'关键字一起使用时覆盖python open函数以打印任何内容

在python中与range一起使用时如何增加循环索引?

在Powershell中与正则表达式一起使用时,Leftpad不起作用

python中的'yield'关键字如何真正起作用,尤其是与递归一起使用时?

在Python中将knnMatch与opencv一起使用时出错

与ThrowsA一起使用时,TypeMatcher不起作用

当窗口/分区与正向填充一起使用时,将条件添加到pyspark sql中的last()函数

我在python 3中将生成器与输入函数一起使用时遇到问题

与find一起使用时,为什么带有后缀的basename在子shell中不起作用?

Haskell:与lambda函数一起使用时了解map函数

与列表一起使用时,如果函数在AppleScript中不起作用

将addConstraint与python中的xpress库一起使用时无效约束

(Rcpp)armadillos abs()函数与c ++ double一起使用时输出假值,而std :: abs起作用

与python-mode一起使用时,YouCompleteMe冻结

将argv与函数一起使用时出错

与SVG Sprites一起使用时,SVG在IE和Safari中不起作用。

与批处理文件中的enabledelayedexpansion一起使用时,IF不起作用

concat()函数在VTD-XML中与AutoPilot一起使用时,XPath评估失败

htmlentities()与表中的数据一起使用时不起作用

Python Pandas:与apply()一起使用时功能不起作用

与angular js中的函数一起使用时,如何修改此文本的样式?

let 与 -XRankNTypes 一起使用时不起作用

与 python3 一起使用时,ConfigParser 库不起作用

在 Vue CLI 中,data 属性中定义的变量在与 this.VariableName 一起使用时不起作用

在python中与整数一起使用时“&”的作用是什么?

为什么 kivy 与 python 的“elevate()”函数一起使用时会失败?

与数组一起使用时 C 中“&”的含义