Mercurial > genshi > mirror
comparison examples/bench/run.py @ 59:aa6ffd2d7274 trunk
Minor improvements to the benchmark thing.
author | cmlenz |
---|---|
date | Wed, 05 Jul 2006 07:58:36 +0000 |
parents | 300b6a3b0730 |
children | 448792ab1303 |
comparison
equal
deleted
inserted
replaced
58:6b93567d871d | 59:aa6ffd2d7274 |
---|---|
1 from cgi import escape | 1 from cgi import escape |
2 from datetime import datetime, timedelta | 2 from datetime import datetime, timedelta |
3 import os | 3 import os |
4 import sys | 4 import sys |
5 | |
6 def _measure_time(func, repeat=100): | |
7 times = [] | |
8 for i in range(repeat): | |
9 start = datetime.now() | |
10 sys.stdout.write('.') | |
11 sys.stdout.flush() | |
12 func() | |
13 times.append(datetime.now() - start) | |
14 | |
15 print | |
16 total_ms = sum([t.seconds * 1000 + t.microseconds for t in times]) | |
17 print ' --> timing: %s (avg), %s (min), %s (max)' % ( | |
18 timedelta(microseconds=total_ms / len(times)), | |
19 timedelta(microseconds=min([t.seconds * 1000 + t.microseconds for t in times])), | |
20 timedelta(microseconds=max([t.seconds * 1000 + t.microseconds for t in times]))) | |
21 | 5 |
22 def markup(dirname): | 6 def markup(dirname): |
23 from markup.template import Context, TemplateLoader | 7 from markup.template import Context, TemplateLoader |
24 loader = TemplateLoader([dirname], False) | 8 loader = TemplateLoader([dirname], False) |
25 template = loader.load('template.html') | 9 template = loader.load('template.html') |
29 template.generate(ctxt).render('html') | 13 template.generate(ctxt).render('html') |
30 return render | 14 return render |
31 | 15 |
32 def cheetah(dirname): | 16 def cheetah(dirname): |
33 # FIXME: infinite recursion somewhere... WTF? | 17 # FIXME: infinite recursion somewhere... WTF? |
34 from Cheetah.Template import Template | 18 try: |
35 class MyTemplate(Template): | 19 from Cheetah.Template import Template |
36 def serverSidePath(self, path): return os.path.join(dirname, path) | 20 class MyTemplate(Template): |
37 filename = os.path.join(dirname, 'template.tmpl') | 21 def serverSidePath(self, path): return os.path.join(dirname, path) |
38 template = MyTemplate(file=filename) | 22 filename = os.path.join(dirname, 'template.tmpl') |
23 template = MyTemplate(file=filename) | |
39 | 24 |
40 def render(): | 25 def render(): |
41 template = MyTemplate(file=filename, | 26 template = MyTemplate(file=filename, |
42 searchList=[{'title': 'Just a test', | 27 searchList=[{'title': 'Just a test', |
43 'items': [u'Number %d' % num for num in range(1, 15)]}]) | 28 'items': [u'Number %d' % num for num in range(1, 15)]}]) |
44 template.respond() | 29 template.respond() |
45 return render | 30 return render |
31 except ImportError: | |
32 return None | |
46 | 33 |
47 def clearsilver(dirname): | 34 def clearsilver(dirname): |
48 import neo_cgi | 35 try: |
49 neo_cgi.update() | 36 import neo_cgi |
50 import neo_util | 37 neo_cgi.update() |
51 import neo_cs | 38 import neo_util |
52 def render(): | 39 import neo_cs |
53 hdf = neo_util.HDF() | 40 def render(): |
54 hdf.setValue('hdf.loadpaths.0', dirname) | 41 hdf = neo_util.HDF() |
55 hdf.setValue('title', escape('Just a test')) | 42 hdf.setValue('hdf.loadpaths.0', dirname) |
56 for num in range(1, 15): | 43 hdf.setValue('title', escape('Just a test')) |
57 hdf.setValue('items.%d' % (num - 1), escape('Number %d' % num)) | 44 for num in range(1, 15): |
58 cs = neo_cs.CS(hdf) | 45 hdf.setValue('items.%d' % (num - 1), escape('Number %d' % num)) |
59 cs.parseFile('template.cs') | 46 cs = neo_cs.CS(hdf) |
60 return render | 47 cs.parseFile('template.cs') |
48 cs.render() | |
49 return render | |
50 except ImportError: | |
51 return None | |
61 | 52 |
62 def kid(dirname): | 53 def kid(dirname): |
63 import kid | 54 try: |
64 kid.path = kid.TemplatePath([dirname]) | 55 import kid |
65 template = kid.Template(file='template.kid') | 56 kid.path = kid.TemplatePath([dirname]) |
66 def render(): | 57 template = kid.Template(file='template.kid') |
67 template = kid.Template(file='template.kid', | 58 def render(): |
68 title='Just a test', | 59 template = kid.Template(file='template.kid', |
69 items=['Number %d' % num for num in range(1, 15)]) | 60 title='Just a test', |
70 template.serialize(output='xhtml') | 61 items=['Number %d' % num for num in range(1, 15)]) |
71 return render | 62 template.serialize(output='xhtml') |
63 return render | |
64 except ImportError: | |
65 return None | |
72 | 66 |
73 def main(): | 67 def main(): |
74 basepath = os.path.abspath(os.path.dirname(__file__)) | 68 basepath = os.path.abspath(os.path.dirname(__file__)) |
75 for engine in ('markup', 'clearsilver', 'kid'): | 69 for engine in ('markup', 'clearsilver', 'kid'): |
76 dirname = os.path.join(basepath, engine) | 70 dirname = os.path.join(basepath, engine) |
77 print '%s:' % engine.capitalize() | 71 print '%s:' % engine.capitalize() |
78 func = globals()[engine](dirname) | 72 func = globals()[engine](dirname) |
79 _measure_time(func) | 73 if not func: |
74 print 'Skipping %s, not installed?' % engine.capitalize() | |
75 continue | |
76 times = [] | |
77 for i in range(100): | |
78 start = datetime.now() | |
79 sys.stdout.write('.') | |
80 sys.stdout.flush() | |
81 func() | |
82 times.append(datetime.now() - start) | |
83 | |
84 print | |
85 total_ms = sum([t.seconds * 1000 + t.microseconds for t in times]) | |
86 print ' --> timing: %s (avg), %s (min), %s (max)' % ( | |
87 timedelta(microseconds=total_ms / len(times)), | |
88 timedelta(microseconds=min([t.seconds * 1000 + t.microseconds for t in times])), | |
89 timedelta(microseconds=max([t.seconds * 1000 + t.microseconds for t in times]))) | |
80 print | 90 print |
81 | 91 |
82 if __name__ == '__main__': | 92 if __name__ == '__main__': |
83 main() | 93 main() |