[Python-checkins] peps: PEP 418: clock_precision.py was wrong, recompute all "Precision in Python"

victor.stinner python-checkins at python.org
Wed Apr 18 22:55:11 CEST 2012


http://hg.python.org/peps/rev/5b2f298e0eed
changeset:   4267:5b2f298e0eed
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Wed Apr 18 22:49:58 2012 +0200
summary:
  PEP 418: clock_precision.py was wrong, recompute all "Precision in Python"

files:
  pep-0418/clock_precision.py |  36 +++++++++++++++---------
  1 files changed, 22 insertions(+), 14 deletions(-)


diff --git a/pep-0418/clock_precision.py b/pep-0418/clock_precision.py
--- a/pep-0418/clock_precision.py
+++ b/pep-0418/clock_precision.py
@@ -1,26 +1,33 @@
 import time
 
+try:
+    from time import timeout_time
+except ImportError:
+    from time import time as timeout_time
+
 def compute_precision(func):
-    previous = func()
     precision = None
     points = 0
-    min_points = 100
-    while points < min_points:
-        value = func()
-        if value == previous:
-            continue
-        dt = value - previous
-        previous = value
+    timeout = timeout_time() + 1.0
+    previous = func()
+    while timeout_time() < timeout or points < 3:
+        for loop in range(10):
+            t1 = func()
+            t2 = func()
+            dt = t2 - t1
+            if 0 < dt:
+                break
+        else:
+            dt = t2 - previous
+            if dt <= 0.0:
+                continue
         if precision is not None:
             precision = min(precision, dt)
         else:
             precision = dt
-        if precision < 10e-6:
-            min_points = 5000
-        elif precision < 1e-3:
-            min_points = 1000
         points += 1
-    return dt
+        previous = func()
+    return precision
 
 def format_duration(dt):
     if dt >= 1e-3:
@@ -31,8 +38,8 @@
         return "%.0f ns" % (dt * 1e9)
 
 def test_clock(name, func):
+    print("%s:" % name)
     precision = compute_precision(func)
-    print("%s:" % name)
     print("- precision in Python: %s" % format_duration(precision))
 
 
@@ -50,6 +57,7 @@
     print("- resolution: %s" % format_duration(info['resolution']))
 
 clock_ids = [name for name in dir(time) if name.startswith("CLOCK_")]
+clock_ids.sort()
 for clock_id_text in clock_ids:
     clock_id = getattr(time, clock_id_text)
     name = 'clock_gettime(%s)' % clock_id_text

-- 
Repository URL: http://hg.python.org/peps


More information about the Python-checkins mailing list