写点什么

python 小知识 -python 序列化

作者:AIWeker
  • 2022-11-02
    福建
  • 本文字数:816 字

    阅读完需:约 3 分钟

python小知识-python序列化

1. 什么是序列化

有时候,我们希望存储或者传输不只是数据,而是一些内存中的对象和数据结构,以便在远程或者其他进程中可以直接使用相同的对象。

常见的场景有,在数据分析过程中,通常模型训练是离线的,而预测时线上的,而同时也需要不断的更新模型到线上来预测;所以当我们训练好一个机器学习的模型时需要保存这个模型的内存中对象(包括上下文的状态信息),以便可以用来做预测;在分布式计算时,如 spark 内存分布式计算框架,在集群之间需要进行大量的对象传输;

这里的将内存中对象存储的过程就是序列化,而在其他进程中使用这个对象的过程是反序列化。

更简单的说,序列化就是把内存中的数据结构在不丢失其身份和类型信息的情况下转成对象的文本或二进制表示的过程。而反序列化就是将对象的文本或者二进制还原成原始对象的过程。

2. python 的序列化

python 中提供需要方法支持序列化,比较常用的 pickle 和 json

其中序列化的过程是 dump,反序列化的过程是 load

我们来看看

import pickledict_obj = {"name": "jack", "age": 40}with open('picklefile.data', 'wb') as f:    pickle.dump(dict_obj, f)    print(dict_obj, type(dict_obj))
# {'name': 'jack', 'age': 40} <class 'dict'>
with open('picklefile.data', 'rb') as f: new_dict_obj = pickle.load(f)
# {'name': 'jack', 'age': 40} <class 'dict'>
复制代码

pickle 几乎支持 python 所有的对象,包括布尔、数字、字符串、字节数组、None、列表、元组、字典和集合等基本数据类型,picike 还能够处理循环,递归引用对象、类、函数以及类的实例等

pickle 有一个 C 的实现即 Cpickle,区别就是速度,Cpickle 的速度是 pickle 的 1000 倍import cPickle as pickle

3.python 序列化的缺点

  • 首先 pickle 是 python 的包,pickle 序列化对象只能在 python 环境中使用,不能跨语言

  • pickle 可能存在安全性问题

跨语言的问题,Java 序列化同样的问题。通用的有 google 的 Protocol Buffers 和 facebook 的 Thrift,有兴趣可以了解下,包括 gRPC。

发布于: 刚刚阅读数: 2
用户头像

AIWeker

关注

InfoQ签约作者 / 公众号:人工智能微客 2019-11-21 加入

人工智能微客(aiweker)长期跟踪和分享人工智能前沿技术、应用、领域知识,不定期的发布相关产品和应用,欢迎关注和转发

评论

发布
暂无评论
python小知识-python序列化_Python_AIWeker_InfoQ写作社区