mirror of https://github.com/python/cpython.git
time.clock() now emits a DeprecationWarning (GH-4020)
bpo-31803: time.clock() and time.get_clock_info('clock') now emit a DeprecationWarning warning. Replace time.clock() with time.perf_counter() in tests and demos. Remove also hasattr(time, 'monotonic') in test_time since time.monotonic() is now always available since Python 3.5.
This commit is contained in:
parent
de86073a76
commit
884d13a55f
|
@ -575,7 +575,7 @@ procedure can be used to obtain a better constant for a given platform (see
|
||||||
The method executes the number of Python calls given by the argument, directly
|
The method executes the number of Python calls given by the argument, directly
|
||||||
and again under the profiler, measuring the time for both. It then computes the
|
and again under the profiler, measuring the time for both. It then computes the
|
||||||
hidden overhead per profiler event, and returns that as a float. For example,
|
hidden overhead per profiler event, and returns that as a float. For example,
|
||||||
on a 1.8Ghz Intel Core i5 running Mac OS X, and using Python's time.clock() as
|
on a 1.8Ghz Intel Core i5 running Mac OS X, and using Python's time.process_time() as
|
||||||
the timer, the magical number is about 4.04e-6.
|
the timer, the magical number is about 4.04e-6.
|
||||||
|
|
||||||
The object of this exercise is to get a fairly consistent result. If your
|
The object of this exercise is to get a fairly consistent result. If your
|
||||||
|
|
|
@ -289,6 +289,9 @@ Functions
|
||||||
|
|
||||||
.. function:: perf_counter()
|
.. function:: perf_counter()
|
||||||
|
|
||||||
|
.. index::
|
||||||
|
single: benchmarking
|
||||||
|
|
||||||
Return the value (in fractional seconds) of a performance counter, i.e. a
|
Return the value (in fractional seconds) of a performance counter, i.e. a
|
||||||
clock with the highest available resolution to measure a short duration. It
|
clock with the highest available resolution to measure a short duration. It
|
||||||
does include time elapsed during sleep and is system-wide. The reference
|
does include time elapsed during sleep and is system-wide. The reference
|
||||||
|
@ -300,6 +303,11 @@ Functions
|
||||||
|
|
||||||
.. function:: process_time()
|
.. function:: process_time()
|
||||||
|
|
||||||
|
.. index::
|
||||||
|
single: CPU time
|
||||||
|
single: processor time
|
||||||
|
single: benchmarking
|
||||||
|
|
||||||
Return the value (in fractional seconds) of the sum of the system and user
|
Return the value (in fractional seconds) of the sum of the system and user
|
||||||
CPU time of the current process. It does not include time elapsed during
|
CPU time of the current process. It does not include time elapsed during
|
||||||
sleep. It is process-wide by definition. The reference point of the
|
sleep. It is process-wide by definition. The reference point of the
|
||||||
|
|
|
@ -241,7 +241,7 @@ class c_int_S(_SimpleCData):
|
||||||
def run_test(rep, msg, func, arg=None):
|
def run_test(rep, msg, func, arg=None):
|
||||||
## items = [None] * rep
|
## items = [None] * rep
|
||||||
items = range(rep)
|
items = range(rep)
|
||||||
from time import clock
|
from time import perf_counter as clock
|
||||||
if arg is not None:
|
if arg is not None:
|
||||||
start = clock()
|
start = clock()
|
||||||
for i in items:
|
for i in items:
|
||||||
|
|
|
@ -194,7 +194,7 @@ def test_toolong(self):
|
||||||
|
|
||||||
def run_test(rep, msg, func, arg):
|
def run_test(rep, msg, func, arg):
|
||||||
items = range(rep)
|
items = range(rep)
|
||||||
from time import clock
|
from time import perf_counter as clock
|
||||||
start = clock()
|
start = clock()
|
||||||
for i in items:
|
for i in items:
|
||||||
func(arg); func(arg); func(arg); func(arg); func(arg)
|
func(arg); func(arg); func(arg); func(arg); func(arg)
|
||||||
|
|
|
@ -195,7 +195,7 @@ def trace_dispatch(self, frame, event, arg):
|
||||||
self.t = r[0] + r[1] - t # put back unrecorded delta
|
self.t = r[0] + r[1] - t # put back unrecorded delta
|
||||||
|
|
||||||
# Dispatch routine for best timer program (return = scalar, fastest if
|
# Dispatch routine for best timer program (return = scalar, fastest if
|
||||||
# an integer but float works too -- and time.clock() relies on that).
|
# an integer but float works too -- and time.process_time() relies on that).
|
||||||
|
|
||||||
def trace_dispatch_i(self, frame, event, arg):
|
def trace_dispatch_i(self, frame, event, arg):
|
||||||
timer = self.timer
|
timer = self.timer
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
import time
|
import time
|
||||||
import threading
|
import threading
|
||||||
import unittest
|
import unittest
|
||||||
|
import warnings
|
||||||
try:
|
try:
|
||||||
import _testcapi
|
import _testcapi
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
@ -64,9 +65,11 @@ def test_time(self):
|
||||||
self.assertTrue(info.adjustable)
|
self.assertTrue(info.adjustable)
|
||||||
|
|
||||||
def test_clock(self):
|
def test_clock(self):
|
||||||
time.clock()
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
time.clock()
|
||||||
|
|
||||||
info = time.get_clock_info('clock')
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
info = time.get_clock_info('clock')
|
||||||
self.assertTrue(info.monotonic)
|
self.assertTrue(info.monotonic)
|
||||||
self.assertFalse(info.adjustable)
|
self.assertFalse(info.adjustable)
|
||||||
|
|
||||||
|
@ -427,8 +430,6 @@ def test_mktime_error(self):
|
||||||
pass
|
pass
|
||||||
self.assertEqual(time.strftime('%Z', tt), tzname)
|
self.assertEqual(time.strftime('%Z', tt), tzname)
|
||||||
|
|
||||||
@unittest.skipUnless(hasattr(time, 'monotonic'),
|
|
||||||
'need time.monotonic')
|
|
||||||
def test_monotonic(self):
|
def test_monotonic(self):
|
||||||
# monotonic() should not go backward
|
# monotonic() should not go backward
|
||||||
times = [time.monotonic() for n in range(100)]
|
times = [time.monotonic() for n in range(100)]
|
||||||
|
@ -467,8 +468,6 @@ def test_process_time(self):
|
||||||
self.assertTrue(info.monotonic)
|
self.assertTrue(info.monotonic)
|
||||||
self.assertFalse(info.adjustable)
|
self.assertFalse(info.adjustable)
|
||||||
|
|
||||||
@unittest.skipUnless(hasattr(time, 'monotonic'),
|
|
||||||
'need time.monotonic')
|
|
||||||
@unittest.skipUnless(hasattr(time, 'clock_settime'),
|
@unittest.skipUnless(hasattr(time, 'clock_settime'),
|
||||||
'need time.clock_settime')
|
'need time.clock_settime')
|
||||||
def test_monotonic_settime(self):
|
def test_monotonic_settime(self):
|
||||||
|
@ -506,12 +505,15 @@ def test_localtime_failure(self):
|
||||||
self.assertRaises(ValueError, time.ctime, float("nan"))
|
self.assertRaises(ValueError, time.ctime, float("nan"))
|
||||||
|
|
||||||
def test_get_clock_info(self):
|
def test_get_clock_info(self):
|
||||||
clocks = ['clock', 'perf_counter', 'process_time', 'time']
|
clocks = ['clock', 'monotonic', 'perf_counter', 'process_time', 'time']
|
||||||
if hasattr(time, 'monotonic'):
|
|
||||||
clocks.append('monotonic')
|
|
||||||
|
|
||||||
for name in clocks:
|
for name in clocks:
|
||||||
info = time.get_clock_info(name)
|
if name == 'clock':
|
||||||
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
info = time.get_clock_info('clock')
|
||||||
|
else:
|
||||||
|
info = time.get_clock_info(name)
|
||||||
|
|
||||||
#self.assertIsInstance(info, dict)
|
#self.assertIsInstance(info, dict)
|
||||||
self.assertIsInstance(info.implementation, str)
|
self.assertIsInstance(info.implementation, str)
|
||||||
self.assertNotEqual(info.implementation, '')
|
self.assertNotEqual(info.implementation, '')
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from turtle import Turtle, mainloop
|
from turtle import Turtle, mainloop
|
||||||
from time import clock
|
from time import perf_counter as clock
|
||||||
|
|
||||||
# wrapper for any additional drawing routines
|
# wrapper for any additional drawing routines
|
||||||
# that need to know about each other
|
# that need to know about each other
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
"""
|
"""
|
||||||
from turtle import Turtle, colormode, tracer, mainloop
|
from turtle import Turtle, colormode, tracer, mainloop
|
||||||
from random import randrange
|
from random import randrange
|
||||||
from time import clock
|
from time import perf_counter as clock
|
||||||
|
|
||||||
def symRandom(n):
|
def symRandom(n):
|
||||||
return randrange(-n,n+1)
|
return randrange(-n,n+1)
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
scripts for turtle-graphics.
|
scripts for turtle-graphics.
|
||||||
"""
|
"""
|
||||||
from turtle import *
|
from turtle import *
|
||||||
from time import sleep, clock
|
from time import sleep, perf_counter as clock
|
||||||
|
|
||||||
class CurvesTurtle(Pen):
|
class CurvesTurtle(Pen):
|
||||||
# example derived from
|
# example derived from
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
"""
|
"""
|
||||||
from turtle import *
|
from turtle import *
|
||||||
from math import cos, pi
|
from math import cos, pi
|
||||||
from time import clock, sleep
|
from time import perf_counter as clock, sleep
|
||||||
|
|
||||||
f = (5**0.5-1)/2.0 # (sqrt(5)-1)/2 -- golden ratio
|
f = (5**0.5-1)/2.0 # (sqrt(5)-1)/2 -- golden ratio
|
||||||
d = 2 * cos(3*pi/10)
|
d = 2 * cos(3*pi/10)
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
there are 1024 turtles.
|
there are 1024 turtles.
|
||||||
"""
|
"""
|
||||||
from turtle import Turtle, mainloop
|
from turtle import Turtle, mainloop
|
||||||
from time import clock
|
from time import perf_counter as clock
|
||||||
|
|
||||||
def tree(plist, l, a, f):
|
def tree(plist, l, a, f):
|
||||||
""" plist is list of pens
|
""" plist is list of pens
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
Followed by a complete undo().
|
Followed by a complete undo().
|
||||||
"""
|
"""
|
||||||
from turtle import Screen, Turtle, mainloop
|
from turtle import Screen, Turtle, mainloop
|
||||||
from time import clock, sleep
|
from time import perf_counter as clock, sleep
|
||||||
|
|
||||||
def mn_eck(p, ne,sz):
|
def mn_eck(p, ne,sz):
|
||||||
turtlelist = [p]
|
turtlelist = [p]
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
time.clock() and time.get_clock_info('clock') now emit a DeprecationWarning
|
||||||
|
warning.
|
|
@ -104,6 +104,13 @@ perf_counter(_Py_clock_info_t *info)
|
||||||
static PyObject*
|
static PyObject*
|
||||||
pyclock(_Py_clock_info_t *info)
|
pyclock(_Py_clock_info_t *info)
|
||||||
{
|
{
|
||||||
|
if (PyErr_WarnEx(PyExc_DeprecationWarning,
|
||||||
|
"time.clock has been deprecated in Python 3.3 and will "
|
||||||
|
"be removed from Python 3.8: "
|
||||||
|
"use time.perf_counter or time.process_time "
|
||||||
|
"instead", 1) < 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
#ifdef MS_WINDOWS
|
#ifdef MS_WINDOWS
|
||||||
return perf_counter(info);
|
return perf_counter(info);
|
||||||
#else
|
#else
|
||||||
|
|
Loading…
Reference in New Issue