莳萝:加载存储对象时,获取"调度[键](自身)键错误:"\x7f"



自从我的这个问题得到软件包维护者的很好地回答以来,我一直在使用dill

但是最近,在我的用例中,我收到以下错误:

stored_env = dill.load(f_in)
  File "A:anacondalibsite-packagesdilldill.py", line 250, in load
    obj = pik.load()
  File "A:anacondalibpickle.py", line 864, in load
    dispatch[key](self)
KeyError: 'x7f'

这可能意味着什么?

我正在使用dill版本:'0.2.5',由pip install dill检索

我尝试设置dill.detect.trace(True),但我没有得到任何输出。

编辑:这是一个不起作用的最小示例:

#test.py
import numba as nb
import numpy as np
@nb.jit(nopython=True)
def my_fast_vector_add(x, y):
    num_elements = x.shape[0]
    z = np.zeros(num_elements, dtype=np.float64)
    for i in range(num_elements):
        z[i] = x[i] + y[i]
    return z  
class Environment():
    def __init__(self):
        self.x = np.random.rand(10)
        self.y = np.random.rand(10)
    def my_vector_add(self):
        return my_fast_vector_add(self.x, self.y)

以及将这一切组合在一起的代码:

#doit.py
import test
import dill
import os
import shutil
import gzip
env = test.Environment()
print "init add result: ", env.my_vector_add()
pkl_path = "test.pkl"
with open(pkl_path, 'w') as f:
    dill.dump(env, f)
compressed_path = "test.zip"
with open(pkl_path, 'r') as f_in, gzip.open(compressed_path, 'wb') as f_out:
    shutil.copyfileobj(f_in, f_out)
os.remove(pkl_path)
stored_env = None
with gzip.open(compressed_path, 'r') as f_in:
    stored_env = dill.load(f_in)
    print "loaded add result: ", stored_env.my_vector_add()

生成的错误是:

    exec(compile(scripttext, filename, 'exec'), glob, loc)
  File "A:/dill_issue/doit.py", line 25, in <module>
    stored_env = dill.load(f_in)
  File "A:anacondalibsite-packagesdilldill.py", line 250, in load
    obj = pik.load()
  File "A:anacondalibpickle.py", line 864, in load
    dispatch[key](self)
  File "A:anacondalibpickle.py", line 886, in load_eof
    raise EOFError
EOFError
显然

答案是从dill-0.2.5升级到dill-0.2.6.dev0

最新更新