import profile as profiler import pstats import meld3 # get rid of the noise of setting up an encoding # in profile output '.'.encode('utf-8') template = """ This is the title
This is the head slot
Name Description
""" values = [] for thing in range(0, 20): values.append((str(thing), str(thing))) def run(root): clone = root.clone() ob = clone.findmeld('tr') for tr, (name, desc) in ob.repeat(values): tr.findmeld('td1').content(name) tr.findmeld('td2').content(desc) foo = clone.write_htmlstring() def profile(num): ## import cProfile ## profiler = cProfile profiler.run("[run(root) for x in range(0,100)]", 'logfile.dat') stats = pstats.Stats('logfile.dat') stats.strip_dirs() stats.sort_stats('cumulative', 'calls') #stats.sort_stats('calls') stats.print_stats(num) if __name__ == '__main__': root = meld3.parse_xmlstring(template) run(root) profile(30) import timeit t = timeit.Timer("run(root)", "from __main__ import run, root") repeat = 50 number = 50 result = t.repeat(repeat, number) best = min(result) print "%d loops " % repeat usec = best * 1e6 / number msec = usec / 1000 print "best of %d: %.*g msec per loop" % (repeat, 8, msec) #run(root, trace=True)