为什么拆包这么慢?

2024-09-28 01:28:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我举一个简单的例子:

def __init__(self,string):
    self.string = string

def UI32(self):
    tmp = self.string[:4]
    self.string = self.string[4:]
    return unpack(">I",tmp)[0]

data = file.read()
U = UI(data)
for i in range(60000):
    test = UI32()

总时间:22秒!在


Tags: inselfuiforreaddatastringreturn
2条回答

首先,我不能在我的系统上复制22(Intel Nehalem,64位Ubuntu,Python2.6.5)。在

以下内容需要1.4s(这实际上是您的代码,由我填写一些空格):

import struct

class UI(object):
    def __init__(self,string):
        self.string = string

    def UI32(self):
        tmp = self.string[:4]
        self.string = self.string[4:]
        return struct.unpack(">I",tmp)[0]

U = UI('0' * 240000)
for i in range(60000):
    test = U.UI32()

现在,这里有几个明显的低效率,特别是在self.string附近。在

我把你的代码改写成这样:

^{pr2}$

在同一台机器上,现在需要0.025s。在

60000循环循环的每次迭代都要复制整个内存缓冲区:

self.string = self.string[4:]

简单地使用索引遍历字符串并在最后清除变量会更有效。在

相关问题 更多 >

    热门问题