为什么pypy的时钟()如此不精确?

时间:2015-01-07 21:48:11

标签: python pypy

我尝试了一些代码,并注意到pypy的一些非常奇怪的结果。看看这个例子:

from time import clock
from random import randint

times = []
for _ in range(10):
  start = clock()
  sum(i * i for i in range(randint(1000000, 2000000))) # waste time
  end = clock()
  times.append(int((end - start) * 1000000))

for t in times:
  print(t, "µs")

使用python3运行,有一堆随机结果,正如所料:

506246 µs
461735 µs
403287 µs
472049 µs
651156 µs
609496 µs
467181 µs
633187 µs
562603 µs
744360 µs

用pypy跑步,似乎一切都只准确到三分之一秒:

43332 µs
36667 µs
30000 µs
23332 µs
19999 µs
23334 µs
26665 µs
20000 µs
36667 µs
26666 µs

为什么?

2 个答案:

答案 0 :(得分:1)

来自Python documentation

  

精确度,实际上是“处理器时间”含义的定义,取决于同名C函数的精度。

不同实现的精度会有所不同。在这种情况下,pypy似乎使用了一个周期为1/30秒的计时器,所以精度永远不会比那更好。

答案 1 :(得分:1)

Mark的答案在理论上是正确的,但它确实是一个错误。请在PyPy的问题跟踪器上打开一个错误,准确指定您正在使用的平台和PyPy版本(我似乎在Linux上获得了正确的精度,而在Windows上获得了John)。