关于Python pickle

Date: 2019/10/25 Tags: Python


pickle是一种on-wire协议,用于序列化Python对象。

如何让自己的object可以被pickle呢?

  1. __setstate__()__getstate__()
  2. __reduce__()
    • 可以接收很多类的返回值, 比较有用的是返回一对(deserializer, args), args是tuple, 可以存储bytes到这里

一个例子是Pytorch里model的pickle非常慢, dask用几行解决了这个bug, 原代码中的__reduce__()函数将tensor都转为了List, 导致很慢, 只需要转为bytes即可

结论: pickle并不慢, 慢的是(自定义类型的)实现