Author: duncan
Date: Sat Mar 15 10:15:02 2008
New Revision: 10528
Log:
Renamed timed to benchmark
Removed the singleton, was a silly idea
Added exception handling
Added:
branches/rel-1/freevo/src/util/benchmark.py
- copied, changed from r10525, /branches/rel-1/freevo/src/util/timed.py
Removed:
branches/rel-1/freevo/src/util/timed.py
Copied: branches/rel-1/freevo/src/util/benchmark.py (from r10525,
/branches/rel-1/freevo/src/util/timed.py)
==============================================================================
--- /branches/rel-1/freevo/src/util/timed.py (original)
+++ branches/rel-1/freevo/src/util/benchmark.py Sat Mar 15 10:15:02 2008
@@ -31,52 +31,35 @@
import time
-_singleton = None
+_indentation = 0
-def level():
- global _singleton
- if _singleton is None:
- _singleton = Level()
- return _singleton
-
-class Level:
- level = 0
- def __call__(self):
- return self.level
-
- def __incr__(self):
- self.level += 1
-
- def __decr__(self):
- self.level -= 1
-
-
-
-class timed:
+class benchmark:
"""
A decorator class to time function calls
http://wiki.python.org/moin/PythonDecoratorLibrary
"""
def __init__(self, reset=True):
- """ Contructs the timed class
+ """ Contructs the benchmark class
@param reset: resets the timer a each call
"""
self.reset = reset
self.start = time.time()
- self.level = level()
def __call__(self, func):
def newfunc(*args, **kwargs):
- pre = ' ' * self.level()
- self.level.__incr__()
+ global _indentation
+ indentation = ' ' * _indentation
+ _indentation += 1
if self.reset:
self.start = time.time()
- print '%s-> %s' % (pre, func.__name__)
- result = func(*args, **kwargs)
- print '%s<- %s: %.3f' % (pre, func.__name__, time.time() -
self.start)
- self.level.__decr__()
+ print '%s-> %s' % (indentation, func.__name__)
+ try:
+ result = func(*args, **kwargs)
+ finally:
+ print '%s<- %s: %.3f' % (indentation, func.__name__,
time.time() - self.start)
+ _indentation -= 1
return result
newfunc.__name__ = func.__name__
newfunc.__doc__ = func.__doc__
@@ -86,14 +69,29 @@
if __name__ == '__main__':
- @timed(False)
+ @benchmark(False)
+ def quickrunning(n):
+ """Wait for n * 1us"""
+ for i in range(n):
+ time.sleep(0.000001)
+
+
+ @benchmark(False)
def longrunning(n):
"""Wait for n * 100ms"""
+ quickrunning(n)
for i in range(n):
time.sleep(0.1)
+
+ @benchmark(False)
+ def failure():
+ """Generate an exception"""
+ return 1/0
+
longrunning(12)
longrunning(2)
print '__repr__:', longrunning
print '__name__:', longrunning.__name__
print '__doc__:', longrunning.__doc__
+ failure()
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog