-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathspeedmeter.py
More file actions
78 lines (64 loc) · 1.84 KB
/
speedmeter.py
File metadata and controls
78 lines (64 loc) · 1.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import time
from collections import OrderedDict
class Speedometer(object):
def __init__(self, num_ema=10):
self.num_ema = num_ema
self.reset()
def reset(self):
self.total = 0
self.start = time.time()
self.last = -1
self.ema = -1
def __call__(self, count):
"""Callback to Show speed."""
now = time.time()
if self.last < 0:
speed = count/(now - self.start)
self.ema = speed
self.last = now
self.total += count
return self.ema
# ema
speed = count/(now - self.last)
self.ema = (self.ema * (self.num_ema-1) + speed) / self.num_ema
self.last = now
self.total += count
return self.ema
@property
def speed(self):
return self.ema
@property
def avg(self):
now = time.time()
return self.total/(now - self.start)
class TimeRecorder(object):
def __init__(self):
self.record = OrderedDict()
self.last = None
def reset(self):
self.record.clear()
self.last = None
def start(self, tag):
"""Callback to Show speed."""
now = time.time()
self.record[tag] = [now]
self.last = tag
def stop(self, tag):
now = time.time()
self.record[tag].append(now)
self.last = None
def into(self, tag):
if self.last:
self.stop(self.last)
self.start(tag)
def get_time(self, tag):
l = self.record[tag]
return l[-1] - l[0]
def report(self, tag_list=None):
tags = list(self.record.keys())
fmt_str = ''
for tag in tags:
if tag_list and tag not in tag_list:
continue
fmt_str += '%s:%.4f ' % (tag, self.get_time(tag))
print(fmt_str)