这个joblib是什么并行语法呢?这么多括号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这个joblib是什么并行语法呢?这么多括号相关的知识,希望对你有一定的参考价值。

Scikit-learn经常使用joblibParallel(n_jobs=n_jobs)(delayed(function)(param_to_function) for param_to_function in iterable)这样的调用并行化。

This helpful question and answer表示这个双括号业务意味着第二个集合被传递给涉及第一个集合的调用所返回的任何内容,如果返回的东西是可调用的,那么这很有意义。

但在这里,Parallel(n_jobs=n_jobs)返回的东西应该是一个Parallel对象,对吗?然后我们将它传递给第二个括号中的循环给出的generator对象。在构造之后,您不应该直接将生成器传递给类。对象和输入之间应该有一些函数调用。或者在python中有__some_special_function__可以使用这种语法吗?

这个语法到底是做什么的?

答案

“特殊功能”可能只是一个__call__ method。可以像调用函数一样调用具有该方法的类的实例。在这种情况下,Parallel可能会定义__call__来接受生成器。

(注意,这并不是说编写像你的例子这样的代码是一个好主意。这是不必要的混淆。)

以上是关于这个joblib是什么并行语法呢?这么多括号的主要内容,如果未能解决你的问题,请参考以下文章

Python - 使用 joblib 进行循环并行化

joblib保存模型和joblib的并行化处理和tqdm

什么流动|大括号|语法呢?

现在的多线程,就说两个线程吧(除主线程),是并行运行吗?

多处理支持的并行循环不能嵌套在线程下面

多线程中的上下文切换