我有一个程序可以在Python2和Python3中运行,但是在速度上有很大的不同。据我所知,在交换机中进行了一些内部更改,但是io.BufferedReader真的很高。在两个版本中,我都使用io.BufferedReader因为主程序循环一次只需要一个字节的数据。以下是脚本的cProfile输出的摘录(请参见cumtime,而不是tottime):
Python 2:
ncalls tottime percall cumtime percall filename:lineno(function)
36984 0.188 0.000 0.545 0.000 io.py:929(read)
Python 3:
36996 0.063 0.000 0.063 0.000 {method 'read' of '_io.BufferedReader' objects}
当我打印对象时,两者都返回类似于io.BufferedReader
的内容,所以我确信他们都在使用BufferedReader。在
Here是有问题的代码。见第28行。调用者负责设置bufstream。我用了bufstream = io.open('testfile', 'rb')
为什么BufferedReader在读取文件中的单个字节的速度上有如此大的差异,我如何才能“修复”Python2.x的问题?我运行的是python2.6和python3.1。在
为了给你一个更全面的答案,你需要看到你的代码(或者,更好的,你的代码的可执行的精确性)。在
但是,可以从概要文件输出中得到部分答案:
io.py
表示“python2”(为避免怀疑,请给出实际版本号)正在Python中实现BufferedReader,而_io.BufferedReader
表示“Python3”是用C实现的最新消息:Python2.6的
io.py
超过64Kb,前面包括以下注释:Python2.7的
io.py
大约是4Kb,看起来是_io
模块的一个薄薄的包装。在如果您想在2.6的解决方案方面获得真正的帮助,请展示您的代码。在
Python2.6的可能解决方法
而不是:
test = io.open('test.bmp', 'rb')
这样做:
^{pr2}$一些粗略的计时数字,包括缺失的链接(Python 2.7):
Windows 7 Pro,32位,约5 Mb文件,代码如下:
相关问题 更多 >
编程相关推荐