summaryrefslogtreecommitdiff
path: root/statsd/client.py
diff options
context:
space:
mode:
Diffstat (limited to 'statsd/client.py')
-rw-r--r--statsd/client.py17
1 files changed, 12 insertions, 5 deletions
diff --git a/statsd/client.py b/statsd/client.py
index 0ac8fa9..54f62e7 100644
--- a/statsd/client.py
+++ b/statsd/client.py
@@ -3,9 +3,16 @@ from collections import deque
from functools import wraps
import random
import socket
-import time
import abc
+# Use timer that's not susceptable to time of day adjustments.
+try:
+ # perf_counter is only present on Py3.3+
+ from time import perf_counter as time_now
+except ImportError:
+ # fall back to using time
+ from time import time as time_now
+
__all__ = ['StatsClient', 'TCPStatsClient']
@@ -25,11 +32,11 @@ class Timer(object):
"""Thread-safe timing function decorator."""
@wraps(f)
def _wrapped(*args, **kwargs):
- start_time = time.time()
+ start_time = time_now()
try:
return_value = f(*args, **kwargs)
finally:
- elapsed_time_ms = 1000.0 * (time.time() - start_time)
+ elapsed_time_ms = 1000.0 * (time_now() - start_time)
self.client.timing(self.stat, elapsed_time_ms, self.rate)
return return_value
return _wrapped
@@ -43,13 +50,13 @@ class Timer(object):
def start(self):
self.ms = None
self._sent = False
- self._start_time = time.time()
+ self._start_time = time_now()
return self
def stop(self, send=True):
if self._start_time is None:
raise RuntimeError('Timer has not started.')
- dt = time.time() - self._start_time
+ dt = time_now() - self._start_time
self.ms = 1000.0 * dt # Convert to milliseconds.
if send:
self.send()