Bra*_*ram 5 python serialization pickle lru
作为并行化某些现有代码(使用多处理)的一部分,我遇到了需要对类似于下面的类的内容进行腌制的情况。
从...开始:
import pickle
from functools import lru_cache
class Test:
def __init__(self):
self.func = lru_cache(maxsize=None)(self._inner_func)
def _inner_func(self, x):
# In reality this will be slow-running
return x
Run Code Online (Sandbox Code Playgroud)
呼叫
t = Test()
pickle.dumps(t)
Run Code Online (Sandbox Code Playgroud)
回报
_pickle.PicklingError: Can't pickle <functools._lru_cache_wrapper object at 0x00000190454A7AC8>: it's not the same object as __main__.Test._inner_func
Run Code Online (Sandbox Code Playgroud)
我不太明白。顺便说一句,我还尝试了一种变体,其中 _inner_func 的名称也为 func,但这并没有改变任何事情。