当前位置: 首页 > 面试题库 >

封送员转储更快,cPickle加载更快

楚涵润
2023-03-14
问题内容

我正在实现一个需要序列化和反序列化大型
对象,所以我用“pickle”、“cPickle”和“marshal”进行了一些测试`
模块选择最好的模块。一路上我发现了一些非常有趣的东西
有趣的是:
我在一个dict列表中使用dumps,然后loads,
元组、整数、浮点和字符串。
这是我的基准测试的输出:

DUMPING a list of length 7340032
----------------------------------------------------------------------
pickle => 14.675 seconds
length of pickle serialized string: 31457430

cPickle => 2.619 seconds
length of cPickle serialized string: 31457457

marshal => 0.991 seconds
length of marshal serialized string: 117440540

LOADING a list of length: 7340032
----------------------------------------------------------------------
pickle => 13.768 seconds
(same length?) 7340032 == 7340032

cPickle => 2.038 seconds
(same length?) 7340032 == 7340032

marshal => 6.378 seconds
(same length?) 7340032 == 7340032

所以,从这些结果中我们可以看出,元帅的速度非常快**作为基准的一部分:

比“pickle”快14.8倍,比“cPickle”快2.6倍。
但是,令我大吃一惊的是,“元帅”的速度远远慢于“cPickle”
加载部件:
比“pickle”快2.2倍,但比“cPickle”慢3.1倍。
至于RAM,加载时的“marshal”html" target="_blank">性能也非常好
效率低下
我猜加载“marshal”如此缓慢的原因是
和它的序列化字符串的长度相关(比
pickle和’cPickle`)。
为什么“marshal”转储速度更快,加载速度较慢?
为什么“marshal”序列化字符串这么长?
为什么“marshal”的加载在RAM中如此低效?
有没有办法提高“marshal”的加载性能?
*有没有办法将“marshal”快速转储与“cPickle”快速加载合并?


问题答案:

cPickle有一个
更聪明的算法
marshal并且能够做到
减少大型物体占用空间的技巧。这意味着速度会慢一些
解码,但更快的编码作为结果输出较小。元帅
简单化,直接序列化对象而不做任何操作
进一步分析。这也解释了为什么“marshal”加载是如此的复杂
效率低下,它只需要做更多的工作——比如从磁盘读取更多的数据
-能够做与“cPickle”相同的事情。
`“封送员”和“封送员”最终真的是两码事,你不能
真正得到快速保存和快速加载,因为快速保存意味着
较少地分析数据结构,这意味着将大量数据保存到磁盘。
关于“marshal”可能与其他版本的
Python,通常应该使用“cPickle”:

这不是一个通用的“持久性”模块。对于一般的坚持和
通过RPC调用传输Python对象,请参阅pickle和pickle模块
搁置。封送模块的存在主要是为了支持对
pyc文件的Python模块的“伪编译”代码。因此
Python维护人员保留在中修改封送处理格式的权利
如果需要的话,可以采用向后不兼容的方法。如果你在连载
反序列化Python对象时,请改用pickle模块
性能相当,版本独立性得到保证,pickle
支持比marshal更广泛的对象范围
关于元帅的文件)



 类似资料:
  • 问题内容: 该ProGuard的主页上列出的功能: 重新定位和预先验证Java 6的现有类文件,以充分利用Java 6更快的类加载速度。 它所指的Java 6有什么区别? 重要吗? 它会对通过默认类加载器的同步方面的多线程导致的速度下降产生影响吗? 问题答案: 如ProGuard 常见问题解答所提示: Java 6编译器将预验证信息添加到类文件中 查看“ 按类型检查的Java虚拟机规范 验证”部分

  • 问题内容: 给定一个1.5 Gb的熊猫数据帧列表, 哪种格式是加载压缩数据最快的格式 :pickle(通过cPickle),hdf5或Python中的其他格式? 我只关心最快的速度将数据加载到内存中 我不在乎转储数据,它很慢,但是我只做一次。 我不在乎磁盘上的文件大小 问题答案: 我只考虑两种存储格式:HDF5(PyTables)和Feather 这是我对DF进行读写比较的结果(形状:400000

  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 已锁定 。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 是否有任何文献记载的技术可以加快mySQL转储和导入的速度?

  • Loadmore用于实现加载更多的效果,使用比较简单,加上相关的 class 就可以实现这种效果,示例代码如下: <template> <div class="page"> <div class="weui-loadmore"> <div class="weui-loading"></div> <div class="weui-loadmore__tips">正

  • loadMore 加载更多 平台差异说明 App H5 微信小程序 支付宝小程序 百度小程序 头条小程序 QQ小程序 √ √ √ √ √ √ √ 基本使用 通过status设置组件的状态,加载前值为loadmore,加载中为loading,没有数据为nomore 注意:以下示例仅为模拟效果,实际中请根据自己的逻辑,修改代码的实现 <template> <view class="wrap">

  • 我正在使用react Redux实现两种不同类型用户登录。这是我的登录方法: 对于第一种类型的用户,我从后端返回:令牌、电子邮件、id、姓氏。 对于第二种类型的用户,我从后端返回:token、email、id、type。 我做了一些第二类用户无法访问的安全路由。因此,如果返回变量,我将为该用户定义特定的路由。 如果返回变量,它将正确显示链接和redux存储中的所有内容。但是,如果我重新加载页面,那