Welcome, guest | Sign In | My Account | Store | Cart
```'''
Created on Sep 21, 2009

@author: tcezard
This module enable its user to monitor the amount of time spend in between two commands start and stop.
The module is fairly imprecise if the monitored task is quick as the start and stop commands are fairly slow (2e-07 - 5e-07)
'''
from time import time
from math import sqrt
import logging

total = {}
started = {}

def start(key):
started[key]=time()

def stop(key):
stop=time()
start=started.pop(key,None)
if start:
if total.has_key(key):
total[key].append(stop-float(start))
else:
total[key]=[stop-float(start)]
else:
logging.error("stopping non started timer: %s"%key)

def print_all():
header = [ 'title', 'N', 'sum (s)', 'min (s)', 'max (s)', 'mean (s)','std dev (s)' ]
line_array=[]
for key in total.keys():
values=total.get(key)
n = len(values)
s=sum(values)
mean = s / n
sd = sqrt(sum((x-mean)**2 for x in values) / n)
line_array.append([key, n,s,min(values),max(values),mean,sd])
#logging.info("%s: n=%s\tsum=%s\tmin=%s\tmax=%s\tmean=%s\tstd_dev=%s"%(key,n,s,min(values),max(values),mean,sd))

"""This function creates a array formated string of all the job provided."""
#get the column length
column_length=[]
for sp_line in line_array:
for pos in range(len(sp_line)):
column_length[pos]
length = len(str(sp_line[pos]))
if column_length[pos]<length:
column_length[pos]=length

line_length=0
# get the total length of the line
for i in range(len(column_length)):
column_length[i]+=0
line_length+=column_length[i]
line_length+=(len(column_length)*3) + 1
return_string=[]
#print the Text
seperation_line='-'*line_length
return_string.append(seperation_line)
outString=' '
return_string.append(seperation_line)
for sp_line in line_array:
values_str=[]
values_str.append(' %-*s '%(column_length[i],sp_line[i]))
return_string.append(outString+outString.join(values_str)+outString)
return_string.append(seperation_line)
return '\n'.join(return_string)

if __name__=='__main__':
for i in range(100):
start('sleep')
time.sleep(0.1)
stop('sleep')
print_all()

if __name__=='1__main__':
for i in range(100000):
start('Test')
stop('Test')
print_all()
```