使用 Joblib 将类对象实例作为输入参数的并行化函数

Posted

技术标签:

【中文标题】使用 Joblib 将类对象实例作为输入参数的并行化函数【英文标题】:Parallelizing function which takes a class object instance as input argument with Joblib 【发布时间】:2021-09-28 10:06:21 【问题描述】:

我有一个对象类,其初始化函数定义如下

class Foo:
    def __init__(self, arg1, arg2, arg3=True, ...):
        ...

我想并行化一个将我的 Foo 类的实例作为输入的函数。但它会抛出以下错误

foo = F(arg1, arg2, arg3)
Parallel(n_jobs=-1)(delayed(fun)(x, y, foo) for x, y in [args])

__init__() missing 1 required positional argument ...

据我所知,当 foo 对象被 Joblib 腌制时,它会创建我的 foo 类实例的副本,但由于某种原因,该副本没有使用所有正确的参数正确初始化。

【问题讨论】:

每个参数总是将类实例作为参数 无论如何,您确实必须提供minimal reproducible example,包括带有堆栈跟踪的完整错误消息 @juanpa.arrivillaga 感谢您的评论,研究最小的可重现示例为我提供了解决方案。我应该在发布问题之前这样做。 这就是调试问题需要它的原因:) 【参考方案1】:

问题是我的类继承了另一个类,该类有一个复制自身的方法,当它这样做时,它没有传递我继承的类的附加参数。

【讨论】:

以上是关于使用 Joblib 将类对象实例作为输入参数的并行化函数的主要内容,如果未能解决你的问题,请参考以下文章

Python,与 joblib 并行化:延迟多个参数

多个进程共享一个 Joblib 缓存

我们如何在与 joblib 的并行执行中使用 tqdm?

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

多返回值函数的joblib并行处理

将类类型作为参数传递并针对 Kotlin 中的另一个对象检查类型