【发布时间】:2017-09-23 03:25:23
【问题描述】:
python random 模块的性能问题,特别是random.sample 和random.shuffle 出现在this question 中。在我的电脑上,我得到以下结果:
> python -m timeit -s 'import random' 'random.randint(0,1000)'
1000000 loops, best of 3: 1.07 usec per loop
> python3 -m timeit -s 'import random' 'random.randint(0,1000)'
1000000 loops, best of 3: 1.3 usec per loop
这比 python3 与 python2 的性能下降了 20% 以上。情况会变得更糟。
> python -m timeit -s 'import random' 'random.shuffle(list(range(10)))'
100000 loops, best of 3: 3.85 usec per loop
> python3 -m timeit -s 'import random' 'random.shuffle(list(range(10)))'
100000 loops, best of 3: 8.04 usec per loop
> python -m timeit -s 'import random' 'random.sample(range(10),3)'
100000 loops, best of 3: 2.4 usec per loop
> python3 -m timeit -s 'import random' 'random.sample(range(10),3)'
100000 loops, best of 3: 6.49 usec per loop
这表示random.shuffle 的性能下降了 100%,random.sample 的性能下降了几乎 200%。这是相当严重的。
我在上面的测试中使用了python 2.7.9和python 3.4.2。
我的问题:python3 中的random 模块发生了什么?
【问题讨论】:
-
可能值得用更新的 Python 3 版本重新测试。据我了解,过去几年修复了很多性能回归问题。 Python 3.4.2 已经两年半了。在我自己的系统上进行测试,在
randint测试中,3.6.1 比 3.4.3 快 35%。 -
@Blckknght -- 那肯定没有帮助。我刚刚升级到 Python 3.6.1,这让情况变得更糟:
random.randint测试的循环为 1.43 微秒,random.shuffle测试的循环为 8.37 微秒,random.sample测试没有任何变化。
标签: python python-3.x optimization random python-internals