【发布时间】:2010-12-25 18:11:36
【问题描述】:
我有一个在 Python 2 和 Python 3 中运行的程序,但速度上存在巨大差异。我知道在 switch 中进行了一些内部更改,但是 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 读取文件中的单个字节的速度会有如此大的差异,我该如何“修复”Python 2.x 的问题?我正在运行 Python 2.6 和 Python 3.1。
【问题讨论】:
-
好吧好吧。那么问题是什么?
-
@Eric:根据您的编辑,性能对您来说那么重要吗?
-
@A A ,是的,性能非常重要,这就是我问如何解决问题的原因。在最佳情况下,两个版本的 Python 的吞吐量均为 525 KB/s,但在更典型的情况下,Python 2 的吞吐量为 59KB/s,而 Python 3 的吞吐量为 155KB/s。
-
@Eric:好吧,鉴于数字,我希望有人回答你的问题。
-
@Eric Pruitt:关于您的编辑 2,构造函数 arg
stream是什么?
标签: python performance python-3.x bufferedreader