带有 pickle 错误的 Python joblib:Can't pickle <class '__main__。Foo'>:它没有被发现为__main__。傅

Python joblib with pickle error: Can't pickle <class '__main__.Foo'>: it's not found as __main__.Foo

提问人:Bob 提问时间:11/7/2023 最后编辑:Bob 更新时间:11/7/2023 访问量:14

问:

我有一些代码,其中函数返回一个类,我想将其保存到文件中。这个功能需要相当长的时间,所以我想用 joblib 来加速它。但是,我现在收到以下错误:Foo

_pickle.PicklingError: Can't pickle <class '__main__.Foo'>: it's not found as __main__.Foo

我也无法让它在一些简单的代码上工作:

import joblib
from joblib import Parallel, delayed
import pickle

class Foo:
    def __init__(self, x):
        self.x = x

def Fooify(x):
    return Foo(x + 1)

def saveIt(x):
    xFoo = Fooify(x)
    with open(f"test{x}.pkl", "wb") as file:
        joblib.dump(xFoo, file)

Parallel(n_jobs=2)(
        delayed(saveIt)(x) for x in range(10)
)

我都试过了 和 ,但都给出了相同的错误。将 joblib 后端更改为“threading”确实有效,但不幸的是,由于 GIL,这并没有加快我的程序速度。如何修复此错误?pickle.dumpjoblib.dump

编辑: 我在这里找到了一种解决方法,即在自己的文件中声明类,然后导入它。这可行,但我想将所有内容都放在 jupyter 笔记本中。有没有其他方法可以解决这个问题?

python joblib

评论


答: 暂无答案