m9_*_*psy 29 python serialization python-3.x
我是python的新手,想要实现快速对象序列化.我试图使用json,但它太慢了,也试图使用马歇尔模块,但是由马歇尔序列化的对象大小比pickle多6-7倍,所以我决定在我的项目中使用pickle.我读了一下cPickle模块,读得很快,但python 3中没有这样的模块,docs说名为_pickle的模块是用C语言编写的.所以在我的项目中我使用
import _pickle as pickle
Run Code Online (Sandbox Code Playgroud)
pickle和_pickle之间有什么区别吗?我如何实现更快的对象序列化/反序列化?
Mar*_*ers 41
如果可用,pickle模块已经导入_pickle.它是pickle模块的C优化版本,透明使用.
# Use the faster _pickle if possible
try:
from _pickle import *
except ImportError:
Pickler, Unpickler = _Pickler, _Unpickler
Run Code Online (Sandbox Code Playgroud)
并从pickle模块文档:
该
pickle模块有一个_pickle用C编写的透明优化器().只要可用,它就会被使用.否则使用纯Python实现.
在Python 2中,_pickle被称为cPickle,但已经更新,以允许透明使用作为实现细节.
从什么是新的Python 3.0文档的库更改部分:
Python 2.x中的一个常见模式是在纯Python中实现一个模块版本,并将可选的加速版本实现为C扩展; 例如,
pickle和cPickle.这会导致导入加速版本的负担,并在这些模块的每个用户上回退到纯Python版本.在Python 3.0中,加速版本被认为是纯Python版本的实现细节.用户应始终导入标准版本,该版本尝试导入加速版本并回退到纯Python版本.的pickle/cPickle对接收的这种治疗.配置文件模块位于3.1的列表中.该StringIO模块已经变成了io模块中的一个类.
由于它是一个python约定,实现细节以下划线为前缀,cPickle因此成为了_pickle.值得注意的是,这意味着如果您正在导入_pickle,那么API没有保证合同,并且可能在未来的python3版本中破坏向后兼容性,尽管不太可能.