Python2.x与Python3.x中的BufferedReader

2024-09-27 23:22:11 发布

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

我有一个程序可以在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。在


Tags: io程序版本read字节速度python3交换机
1条回答
网友
1楼 · 发布于 2024-09-27 23:22:11

为了给你一个更全面的答案,你需要看到你的代码(或者,更好的,你的代码的可执行的精确性)。在

但是,可以从概要文件输出中得到部分答案:io.py表示“python2”(为避免怀疑,请给出实际版本号)正在Python中实现BufferedReader,而_io.BufferedReader表示“Python3”是用C实现的

最新消息:Python2.6的io.py超过64Kb,前面包括以下注释:

# This is a prototype; hopefully eventually some of this will be
# reimplemented in C.

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文件,代码如下:

while 1:
    c = f.read(1)
    if not c: break

2.6: io.open 20.4s, open 5.1s
2.7: io.open  3.3s, open 4.8s # io.open is better

相关问题 更多 >

    热门问题