python - 在对象上酸洗 lru_cached 函数
问题描述
作为并行化一些现有代码(使用多处理)的一部分,我遇到了类似于下面类的东西需要腌制的情况。
从...开始:
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
打电话
t = Test()
pickle.dumps(t)
返回
_pickle.PicklingError: Can't pickle <functools._lru_cache_wrapper object at 0x00000190454A7AC8>: it's not the same object as __main__.Test._inner_func
我真的不明白。顺便说一句,我还尝试了一个变体,其中 _inner_func 的名称也是 func ,但这并没有改变。
解决方案
如评论中所述,pickle 模块在处理装饰器时存在问题。有关更多详细信息,请参阅此问题:
推荐阅读
- c# - unity text URL 添加额外字符
- javascript - 在启用了 --kiosk-printing 的 chrome 中使用 printJS 打印 pdf 总是失败
- javascript - 使用 Service-Worker React 的离线页面
- r - 如何在 r 中查看交叉验证的重采样数据?
- java - MiniKdc 无法从 org.springframework.security.kerberos.test.MiniKdc 获得
- azure - 名称或服务未知 - Azure 中的间歇性错误
- react-native - React Native 菱形按钮网格
- java - Java中对象内的自动过期字段
- npm - 酱汁服务不适用于移动测试
- swiftui - SwiftUI 中的 Spring 动画,IOS14 坏了