[Python-checkins] cpython: Issue #23552: Timeit now warns when there is substantial (4x) variance
robert.collins
python-checkins at python.org
Wed Aug 26 02:40:51 CEST 2015
https://hg.python.org/cpython/rev/2e9cf58c891d
changeset: 97511:2e9cf58c891d
user: Robert Collins <rbtcollins at hp.com>
date: Wed Aug 26 12:40:28 2015 +1200
summary:
Issue #23552: Timeit now warns when there is substantial (4x) variance
between best and worst times. Patch from Serhiy Storchaka.
files:
Lib/timeit.py | 32 +++++++++++++++++++-------------
Misc/NEWS | 3 +++
2 files changed, 22 insertions(+), 13 deletions(-)
diff --git a/Lib/timeit.py b/Lib/timeit.py
--- a/Lib/timeit.py
+++ b/Lib/timeit.py
@@ -317,20 +317,26 @@
print("%d loops," % number, end=' ')
usec = best * 1e6 / number
if time_unit is not None:
- print("best of %d: %.*g %s per loop" % (repeat, precision,
- usec/units[time_unit], time_unit))
+ scale = units[time_unit]
else:
- if usec < 1000:
- print("best of %d: %.*g usec per loop" % (repeat, precision, usec))
- else:
- msec = usec / 1000
- if msec < 1000:
- print("best of %d: %.*g msec per loop" % (repeat,
- precision, msec))
- else:
- sec = msec / 1000
- print("best of %d: %.*g sec per loop" % (repeat,
- precision, sec))
+ scales = [(scale, unit) for unit, scale in units.items()]
+ scales.sort(reverse=True)
+ for scale, time_unit in scales:
+ if usec >= scale:
+ break
+ print("best of %d: %.*g %s per loop" % (repeat, precision,
+ usec/scale, time_unit))
+ best = min(r)
+ usec = best * 1e6 / number
+ worst = max(r)
+ if worst >= best * 4:
+ usec = worst * 1e6 / number
+ import warnings
+ warnings.warn_explicit(
+ "The test results are likely unreliable. The worst\n"
+ "time (%.*g %s) was more than four times slower than the best time." %
+ (precision, usec/scale, time_unit),
+ UserWarning, '', 0)
return None
if __name__ == "__main__":
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -17,6 +17,9 @@
Library
-------
+- Issue #23552: Timeit now warns when there is substantial (4x) variance
+ between best and worst times. Patch from Serhiy Storchaka.
+
- Issue #24633: site-packages/README -> README.txt.
- Issue #24879: help() and pydoc can now list named tuple fields in the
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list