当前位置:  开发笔记 > 编程语言 > 正文

Python列表序列化 - 最快的方法

如何解决《Python列表序列化-最快的方法》经验,为你挑选了1个好方法。

我需要从Python脚本中的文件(到Python列表)中加载(反序列化)预先计算的整数列表.列表很大(高达数百万项),只要加载速度最快,我就可以选择存储它的格式.

哪种方法最快,为什么?

    import在.py文件上使用,该文件仅包含分配给变量的列表

    cPickle'sload

    其他一些方法(也许numpy?)

另外,如何可靠地对这些事情进行基准测试?

附录:可靠地测量这个是很困难的,因为import它是缓存的,因此在测试中不能多次执行.第一次使用pickle加载也会因为操作系统的页面预先缓存而变得更快.加载100万个数字,cPickle第一次运行需要1.1秒,后续执行脚本需要0.2秒.

直觉上我觉得cPickle应该更快,但我会欣赏数字(我认为这是一个相当大的挑战).

是的,对我来说这很重要.

谢谢



1> Carlos A. Ib..:

我猜如果你真的需要列表中的东西,cPickle将是最快的.

如果你可以使用一个内置序列类型的数组,我会在四分之一秒内为100万个整数计时:

from array import array
from datetime import datetime

def WriteInts(theArray,filename):
    f = file(filename,"wb")
    theArray.tofile(f)
    f.close()

def ReadInts(filename):
    d = datetime.utcnow()
    theArray = array('i')
    f = file(filename,"rb")
    try:
        theArray.fromfile(f,1000000000)
    except EOFError:
        pass
    print "Read %d ints in %s" % (len(theArray),datetime.utcnow() - d)
    return theArray

if __name__ == "__main__":
    a = array('i')
    a.extend(range(0,1000000))
    filename = "a_million_ints.dat"
    WriteInts(a,filename)
    r = ReadInts(filename)
    print "The 5th element is %d" % (r[4])

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有