Eli*_*sky 11 python serialization caching
我需要从Python脚本中的文件(到Python列表)中加载(反序列化)预先计算的整数列表.列表很大(高达数百万项),只要加载速度最快,我就可以选择存储它的格式.
哪种方法最快,为什么?
import在.py文件上使用,该文件仅包含分配给变量的列表cPickle'sloadnumpy?)另外,如何可靠地对这些事情进行基准测试?
附录:可靠地测量这个是很困难的,因为import它是缓存的,因此在测试中不能多次执行.第一次使用pickle加载也会因为操作系统的页面预先缓存而变得更快.加载100万个数字,cPickle第一次运行需要1.1秒,后续执行脚本需要0.2秒.
直觉上我觉得cPickle应该更快,但我会欣赏数字(我认为这是一个相当大的挑战).
是的,对我来说这很重要.
谢谢
我猜如果你真的需要列表中的东西,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])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6642 次 |
| 最近记录: |