Most Pythoneers are familiar with the very handy timeit module. It's a great way to compare Python idioms for performance. I tend to use it from the command line, as in the following.
$ python -m timeit "''.join([ str(i*10000) for i in xrange(100) ])" 10000 loops, best of 3: 114 usec per loop
You can use this method to time multi-line code as well, using multiple command line quoted arguments.
$ python -m timeit "s = ''" "for i in xrange(100):" " s += str(i*10000)" 1000 loops, best of 3: 351 usec per loop
The python -m
trick is new in Python 2.4. Notice the indentation
built into the third argument string.
As you can imagine, this quickly becomes cumbersome, and it would be nice to have a way to perform such timings on proper script files without too much fiddling.
Jeremy Kloth scratched that itch, coming up with timer.py. I bundle it in the test directory of Amara, but you can also grab it directly from CVS.
You can run it on a script, putting the logic to be timed into a main
function. The rest of the script's contents will be treated as set-up
and not factored into the timings.
$ cat /tmp/buildstring.py import cStringIO def main(): s = cStringIO.StringIO() for i in xrange(100): s.write(str(i*10000)) $ python timer.py /tmp/buildstring.py 1000 loops, best of 3: 444 usec
timer.py uses the basic logic from timeit. It tries to keep the running time between 0.2 and 2 secs.