[Python-checkins] cpython: Issue #13847: time.clock() now raises a RuntimeError if the processor time used

victor.stinner python-checkins at python.org
Fri Jan 27 00:39:22 CET 2012


http://hg.python.org/cpython/rev/94b7eb09d0b3
changeset: 74640:94b7eb09d0b3
parent: 74638:dc3de15b43db
user: Victor Stinner <victor.stinner at haypocalc.com>
date: Fri Jan 27 00:38:48 2012 +0100
summary:
 Issue #13847: time.clock() now raises a RuntimeError if the processor time used
is not available or its value cannot be represented
files:
 Misc/NEWS | 3 +-
 Modules/timemodule.c | 38 ++++++++++++++++++++++---------
 2 files changed, 29 insertions(+), 12 deletions(-)
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -463,7 +463,8 @@
 
 - Issue #13847: time.localtime() and time.gmtime() now raise an OSError instead
 of ValueError on failure. time.ctime() and time.asctime() now raises an
- OSError if localtime() failed.
+ OSError if localtime() failed. time.clock() now raises a RuntimeError if the
+ processor time used is not available or its value cannot be represented
 
 - Issue #13862: Fix spurious failure in test_zlib due to runtime/compile time
 minor versions not matching.
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -62,6 +62,31 @@
 Return the current time in seconds since the Epoch.\n\
 Fractions of a second may be present if the system clock provides them.");
 
+#if defined(HAVE_CLOCK)
+
+#ifndef CLOCKS_PER_SEC
+#ifdef CLK_TCK
+#define CLOCKS_PER_SEC CLK_TCK
+#else
+#define CLOCKS_PER_SEC 1000000
+#endif
+#endif
+
+static PyObject *
+pyclock(void)
+{
+ clock_t value;
+ value = clock();
+ if (value == (clock_t)-1) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "the processor time used is not available "
+ "or its value cannot be represented");
+ return NULL;
+ }
+ return PyFloat_FromDouble((double)value / CLOCKS_PER_SEC);
+}
+#endif /* HAVE_CLOCK */
+
 #if defined(MS_WINDOWS) && !defined(__BORLANDC__)
 /* Win32 has better clock replacement; we have our own version, due to Mark
 Hammond and Tim Peters */
@@ -79,8 +104,7 @@
 if (!QueryPerformanceFrequency(&freq) || freq.QuadPart == 0) {
 /* Unlikely to happen - this works on all intel
 machines at least! Revert to clock() */
- return PyFloat_FromDouble(((double)clock()) /
- CLOCKS_PER_SEC);
+ return pyclock();
 }
 divisor = (double)freq.QuadPart;
 }
@@ -91,18 +115,10 @@
 
 #elif defined(HAVE_CLOCK)
 
-#ifndef CLOCKS_PER_SEC
-#ifdef CLK_TCK
-#define CLOCKS_PER_SEC CLK_TCK
-#else
-#define CLOCKS_PER_SEC 1000000
-#endif
-#endif
-
 static PyObject *
 time_clock(PyObject *self, PyObject *unused)
 {
- return PyFloat_FromDouble(((double)clock()) / CLOCKS_PER_SEC);
+ return pyclock();
 }
 #endif /* HAVE_CLOCK */
 
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /