关于Python pickle
Date: 2019/10/25 Tags: Python
pickle是一种on-wire协议,用于序列化Python对象。
如何让自己的object可以被pickle呢?
__setstate__()
和__getstate__()
__reduce__()
- 可以接收很多类的返回值, 比较有用的是返回一对
(deserializer, args)
, args是tuple, 可以存储bytes到这里
- 可以接收很多类的返回值, 比较有用的是返回一对
一个例子是Pytorch里model的pickle非常慢, dask用几行解决了这个bug,
原代码中的__reduce__()
函数将tensor都转为了List, 导致很慢,
只需要转为bytes即可
结论: pickle并不慢, 慢的是(自定义类型的)实现