【发布时间】:2016-02-07 22:19:21
【问题描述】:
我偶然注意到,一个从大型数据文件生成类的简单程序在 Python 2.7 和 3.5 中运行得更快。我读到here 说使用“无限精度”整数是导致简单枚举速度变慢的原因,但即使我尝试了一个简单的测试来实例化这个类,我发现 Python 3 的速度要慢得多:
class Benchmark(object):
def __init__(self):
self.members = ['a', 'b', 'c', 'd']
def test():
test = Benchmark()
if __name__ == '__main__':
import timeit
print(timeit.timeit("test()", setup="from __main__ import test"))
我认为这可能与每个类实例的大小有关,但 Python 3 实例小于 2(56 对 64)
$python3 benchmarks.py
0.7017288669958361
$python benchmarks.py
0.508942842484
我在这个主题上尝试了许多变体,包括在不同的机器上使用 3.4,但仍然得到相同的结果。有什么想法吗?
【问题讨论】:
-
链接的副本是关于 Python 3 比 Python 2 快,而这个问题是相反的。投票重新开放。
-
如果只运行
timeit("Benchmark()", ...),你会得到什么?听起来您真的不想为函数调用、变量赋值等计时。如果您只为列表创建计时呢? -
我得到的结果和你一样,直到我把这个减少到只剩下班级。我只做了
class A: pass,然后将您的timeit调用更改为timeit("A()", setup="from __main__ import A"),Py2 的速度是Py3 的两倍。无论最初的结果如何,我怀疑这与对象实例化有关。如果我这样做class A(object): pass,结果将无法区分。 -
实例创建真的是任何真实代码的瓶颈吗?我猜你对你的班级所做的任何其他工作都会比班级创建慢几个数量级,所以我不担心需要多长时间。如果您分析了您的代码并发现这确实是一个问题,那么当然,您应该对其进行调查,但我怀疑情况是否如此。
-
我只是好奇,在 20 秒内运行某些东西而不是 Py2 的 5 秒,但 Py3 应该更慢似乎有点奇怪。我将它剥离为一个完全空的类的时间实例化,我仍然发现 3 比 2 慢,在 macbook pro 和运行 ubuntu 的 i7-4790K 4.00GHz 处理器和 16gb ram 的工作机器上,两个版本都安装在同一个地方和一切。
标签: python class python-3.x instance