On 06:30 pm, peter.westlake@pobox.com wrote:
A while back I promised to write some benchmarks for twisted.web.template's flattening functions. Is something like this suitable? If so, I'll add lots more test cases. The output format could be improved, too - any preferences?
The output should be something that we can load into our codespeed instance. The output of any of the existing benchmarks in lp:twisted- benchmarks should be a good example of that format (I don't even recall what it is right now - it may not even be a "format" so much as a shape of data to submit to an HTTP API). The `timeit` module is probably not suitable to use to collect the data, as it makes some questionable choices with respect to measurement technique, and at the very least it's inconsistent with the rest of the benchmarks we have. Selecting data to operate on is probably an important part of this benchmark (or collection of benchmarks). It may not be possible to capture all of the interesting performance characteristics in a single dataset. However, at least something that includes HTML tags is probably desirable, since that is the primary use-case. There are some other Python templating systems with benchmarks. One approach that might make sense is to try to build analogous benchmarks for twisted.web.template. (Or perhaps a little thought will reveal that it's not possible to make comparisons between twisted.web.template and those systems, so there's no reason to follow their benchmarking lead.) Jean-Paul
Peter.
from twisted.web.template import flatten from twisted.web.server import Request import twisted.web.http
channel = twisted.web.http.HTTPChannel() request = Request(channel, False)
def make(content): def f(): d = flatten(request, content, lambda _: None) assert d.called return f
def test(content): return timeit.timeit(stmt=make(content), number=repeats)
repeats = 1000
deeplist = ['centre'] for n in range(100): deeplist = [deeplist]
tests = { 'empty': '', 'string': 'hello', 'shortlist': ['hello'], 'longlist': [str(n) for n in range(100)], 'deeplist': deeplist, }
if __name__ == '__main__': import timeit from sys import argv for name in argv[1:] or tests: print name, test(tests[name])
_______________________________________________ Twisted-web mailing list Twisted-web@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web