Close #14690: Use monotonic clock instead of system clock in the sched,

subprocess and trace modules.
This commit is contained in:
Victor Stinner 2012-05-30 13:30:32 +02:00
parent 5e92a1ef5a
commit 949d8c986e
4 changed files with 23 additions and 8 deletions

View file

@ -35,6 +35,10 @@
import threading
except ImportError:
import dummy_threading as threading
try:
from time import monotonic as _time
except ImportError:
from time import time as _time
__all__ = ["scheduler"]
@ -48,7 +52,7 @@ def __ge__(s, o): return (s.time, s.priority) >= (o.time, o.priority)
class scheduler:
def __init__(self, timefunc=time.time, delayfunc=time.sleep):
def __init__(self, timefunc=_time, delayfunc=time.sleep):
"""Initialize a new instance, passing the time and delay
functions"""
self._queue = []

View file

@ -349,6 +349,10 @@ class Popen(args, bufsize=0, executable=None,
import builtins
import warnings
import errno
try:
from time import monotonic as _time
except ImportError:
from time import time as _time
# Exception classes used by this module.
class SubprocessError(Exception): pass
@ -894,7 +898,7 @@ def communicate(self, input=None, timeout=None):
self.wait()
else:
if timeout is not None:
endtime = time.time() + timeout
endtime = _time() + timeout
else:
endtime = None
@ -917,14 +921,14 @@ def _remaining_time(self, endtime):
if endtime is None:
return None
else:
return endtime - time.time()
return endtime - _time()
def _check_timeout(self, endtime, orig_timeout):
"""Convenience for checking if a timeout has expired."""
if endtime is None:
return
if time.time() > endtime:
if _time() > endtime:
raise TimeoutExpired(self.args, orig_timeout)
@ -1471,7 +1475,7 @@ def wait(self, timeout=None, endtime=None):
# printing.
if endtime is not None or timeout is not None:
if endtime is None:
endtime = time.time() + timeout
endtime = _time() + timeout
elif timeout is None:
timeout = self._remaining_time(endtime)

View file

@ -61,6 +61,10 @@
import dis
import pickle
from warnings import warn as _warn
try:
from time import monotonic as _time
except ImportError:
from time import time as _time
try:
import threading
@ -476,7 +480,7 @@ def __init__(self, count=1, trace=1, countfuncs=0, countcallers=0,
self._caller_cache = {}
self.start_time = None
if timing:
self.start_time = time.time()
self.start_time = _time()
if countcallers:
self.globaltrace = self.globaltrace_trackcallers
elif countfuncs:
@ -614,7 +618,7 @@ def localtrace_trace_and_count(self, frame, why, arg):
self.counts[key] = self.counts.get(key, 0) + 1
if self.start_time:
print('%.2f' % (time.time() - self.start_time), end=' ')
print('%.2f' % (_time() - self.start_time), end=' ')
bname = os.path.basename(filename)
print("%s(%d): %s" % (bname, lineno,
linecache.getline(filename, lineno)), end='')
@ -627,7 +631,7 @@ def localtrace_trace(self, frame, why, arg):
lineno = frame.f_lineno
if self.start_time:
print('%.2f' % (time.time() - self.start_time), end=' ')
print('%.2f' % (_time() - self.start_time), end=' ')
bname = os.path.basename(filename)
print("%s(%d): %s" % (bname, lineno,
linecache.getline(filename, lineno)), end='')

View file

@ -60,6 +60,9 @@ Core and Builtins
Library
-------
- Issue #14690: Use monotonic clock instead of system clock in the sched,
subprocess and trace modules.
- Issue #14958: Change IDLE systax highlighting to recognize all string and
byte literals supported in Python 3.3.