使用 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 将类对象实例作为输入参数的并行化函数的主要内容,如果未能解决你的问题,请参考以下文章