Profiling

milestone
At the top of app.py place "import milestone". Then anywhere in your code, regardless of thread or module, call milestone('reached point x')

You can also add string formatting arguments: milestone('reached point %s', 'y')

All references to milestone can easily be commented out or removed with a single find and replace.

When you're done do: import milestone milestone.report

Which will print a very rudimentary chronological report for each milestone reached:

(thread#, milestone, time reached)

You can disable the milestones by setting ENABLE = False.

milestone.py
ENABLE = True

if ENABLE: from System.Threading import Thread from datetime import datetime import threading _tls = threading.local class Stopwatch(object): def __init__(self): self.start = datetime.now def Mark(self): self.stop = datetime.now def GetElapsed(self): td = self.stop - self.start return td.seconds + 1e-6 * td.microseconds def Clone(self): s = Stopwatch s.start = self.start return s       Elapsed = property(GetElapsed) _sw = Stopwatch def set(name, *args): if hasattr(_tls, 'sw'): sw = _tls.sw       else: sw = _tls.sw = _sw.Clone sw.Mark if args: name %= args records.append((Thread.CurrentThread.ManagedThreadId, name, sw.Elapsed)) __builtins__['milestone'] = set else: def _pass(*args): pass __builtins__['milestone'] = _pass records = [] def report: for r in records: print r

I know it sucks to use datetime for precision timing, but I beleive that it is no less precise than any of the timing methods available in silverlight. Oh for a real profiler...

Back to Contents.