首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Pickle协议4中的Pickle文件比第3协议中的文件大一倍,却没有任何速度增长?

为什么Pickle协议4中的Pickle文件比第3协议中的文件大一倍,却没有任何速度增长?
EN

Stack Overflow用户
提问于 2014-06-07 13:05:57
回答 1查看 724关注 0票数 4

我正在测试Python3.4,我注意到泡菜模块有一个新的协议。因此,我对2种协议进行了测试。

代码语言:javascript
复制
def test1():
    pickle3=open("pickle3","wb")
    for i in range(1000000):
        pickle.dump(i,pickle3,3)
    pickle3.close()
    pickle3=open("pickle3","rb")
    for i in range(1000000):
        pickle.load(pickle3)

def test2():
    pickle4=open("pickle4","wb")
    for i in range(1000000):
        pickle.dump(i, pickle4,4)
    pickle3.close()
    pickle4=open("pickle4","rb")
    for i in range(1000000):
        pickle.load(pickle4)

test1标记: 6.473秒内调用2000007次函数

test2标记: 6.740秒内调用2000007次函数

协议4比协议3稍慢,这种差异可以忽略。然而,硬盘的使用确实是不同的。

pickle3使用7,868,672字节。

pickle4使用16,868,672字节。

这不是理由。我继续挖掘。在阅读了PEP3154之后,我大致理解了协议。

第3号议定书(1,2,3,4,5,6,7)

代码语言:javascript
复制
    0: \x80 PROTO      3
    2: (    MARK
    3: K        BININT1    1
    5: K        BININT1    2
    7: K        BININT1    3
    9: K        BININT1    4
   11: K        BININT1    5
   13: K        BININT1    6
   15: K        BININT1    7
   17: t        TUPLE      (MARK at 2)
   18: q    BINPUT     0
   20: .    STOP

第4号议定书(1,2,3,4,5,6,7)

代码语言:javascript
复制
    0: \x80 PROTO      4
    2: \x95 FRAME      18
   11: (    MARK
   12: K        BININT1    1
   14: K        BININT1    2
   16: K        BININT1    3
   18: K        BININT1    4
   20: K        BININT1    5
   22: K        BININT1    6
   24: K        BININT1    7
   26: t        TUPLE      (MARK at 11)
   27: \x94 MEMOIZE
   28: .    STOP

协议3的解拾取器在读取到位置17之前无法知道数据的长度。

对于协议4,从位置2到位置18,有一个显示长度的标题。

然而,我仍然不明白为什么我要付出代价(在极端情况下几乎是硬盘使用量的两倍),但是速度是相同的,或者可能更慢?。

EN

回答 1

Stack Overflow用户

发布于 2014-06-07 13:11:42

你在泡菜。对于这样一个简单的数据类型,提前知道结构的大小是没有好处的。对于更复杂的结构,了解帧大小是一个巨大的提高处理速度。此外,协议4解除了对64位系统的许多限制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24097507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档