meldprofile.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import profile as profiler
  2. import pstats
  3. import meld3
  4. # get rid of the noise of setting up an encoding
  5. # in profile output
  6. '.'.encode('utf-8')
  7. template = """<html xmlns:meld="http://www.plope.com/software/meld3">
  8. <head>
  9. <title meld:id="title">This is the title</title>
  10. <div meld:id="headslot">This is the head slot</div>
  11. </head>
  12. <body>
  13. <div>
  14. <form action="." method="POST">
  15. <table border="0" meld:id="table1">
  16. <tbody meld:id="tbody">
  17. <tr meld:id="tr" class="foo">
  18. <td meld:id="td1">Name</td>
  19. <td meld:id="td2">Description</td>
  20. </tr>
  21. </tbody>
  22. </table>
  23. </form>
  24. </div>
  25. </body>
  26. </html>"""
  27. values = []
  28. for thing in range(0, 20):
  29. values.append((str(thing), str(thing)))
  30. def run(root):
  31. clone = root.clone()
  32. ob = clone.findmeld('tr')
  33. for tr, (name, desc) in ob.repeat(values):
  34. tr.findmeld('td1').content(name)
  35. tr.findmeld('td2').content(desc)
  36. foo = clone.write_htmlstring()
  37. def profile(num):
  38. ## import cProfile
  39. ## profiler = cProfile
  40. profiler.run("[run(root) for x in range(0,100)]", 'logfile.dat')
  41. stats = pstats.Stats('logfile.dat')
  42. stats.strip_dirs()
  43. stats.sort_stats('cumulative', 'calls')
  44. #stats.sort_stats('calls')
  45. stats.print_stats(num)
  46. if __name__ == '__main__':
  47. root = meld3.parse_xmlstring(template)
  48. run(root)
  49. profile(30)
  50. import timeit
  51. t = timeit.Timer("run(root)", "from __main__ import run, root")
  52. repeat = 50
  53. number = 50
  54. result = t.repeat(repeat, number)
  55. best = min(result)
  56. print "%d loops " % repeat
  57. usec = best * 1e6 / number
  58. msec = usec / 1000
  59. print "best of %d: %.*g msec per loop" % (repeat, 8, msec)
  60. #run(root, trace=True)