【发布时间】:2018-09-27 10:28:16
【问题描述】:
我有以下代码(没用,只用于性能测试)
class A:
def __init__(self, i):
self.i = i
start = datetime.now()
foo = {}
for i in range(10000000):
foo[i] = A(i)
print('\nSpent: [ {} ] seconds!'.format((datetime.now()-start).total_seconds()))
问题是,当我使用 Python3.7 运行它时,我得到以下结果
Spent: [ 7.644764 ] seconds!
但是当我用 Python3.6 运行它时
Spent: [ 6.521555 ] seconds!
所以问题是,我是否误解了某些东西,或者旧的 python 更快,我应该使用旧的?
UPD:根据 cmets 的建议,我使用了 timeit 模块,这里是结果
python3.7 -m timeit '"-".join(str(n) for n in range(2000000))'
1 loop, best of 5: 499 msec per loop
python3.6 -m timeit '"-".join(str(n) for n in range(2000000))'
10 loops, best of 3: 405 msec per loop
timeit 的结果对于 3.7 来说仍然很糟糕,真的比 3.6 慢吗?
【问题讨论】:
-
不,这意味着你的计时方法有缺陷。您是否多次运行这两个版本?您是否消除了其他操作系统影响,例如磁盘刷新、垃圾收集和网络活动?
-
你重复了多少次?
-
您确实想使用
timeit模块来评估性能。例如,让该模块处理重复和时间测量。 -
大约 5-7 次,差异总是 0.8 到 1.1 秒(python3.6 更快),但差异很大
-
您的附加测试在 python3.7 上运行 一次。在较小的范围内,20000,
timeit实际上可以运行更多次测试,我得到5.3 msec与5.42毫秒(3.7 与 3.6)。对于 2000 个元素,时间为425 usec和525 usec。 Python 3.7 并不慢,您的测试仍然存在缺陷。
标签: python python-3.x performance performance-testing