line_profiler and kernprof 1.0b2
Robert Kern
robert.kern at gmail.com
Thu Feb 19 22:18:01 CET 2009
line_profiler is a module for doing line-by-line profiling of functions.
kernprof is a convenient script for running either line_profiler or the standard
library's cProfile module.
Download: http://pypi.python.org/pypi/line_profiler
Docs: http://packages.python.org/line_profiler
HG Repo: http://www.enthought.com/~rkern/cgi-bin/hgwebdir.cgi/line_profiler/
Just kernprof: http://packages.python.org/line_profiler/kernprof.py
line_profiler
-------------
line_profiler will time individual statements in specified functions. For example,
here are the results of profiling a single function from a decorated version of
the pystone.py benchmark (the first two lines are output from pystone.py)::
Pystone(1.1) time for 50000 passes = 2.48
This machine benchmarks at 20161.3 pystones/second
Wrote profile results to pystone.py.lprof
Timer unit: 1e-06 s
File: pystone.py
Function: Proc2 at line 149
Total time: 0.606656 s
Line # Hits Time Per Hit % Time Line Contents
==============================================================
149 @profile
150 def Proc2(IntParIO):
151 50000 82003 1.6 13.5 IntLoc = IntParIO + 10
152 50000 63162 1.3 10.4 while 1:
153 50000 69065 1.4 11.4 if Char1Glob == 'A':
154 50000 66354 1.3 10.9 IntLoc = IntLoc - 1
155 50000 67263 1.3 11.1 IntParIO = IntLoc - IntGlob
156 50000 65494 1.3 10.8 EnumLoc = Ident1
157 50000 68001 1.4 11.2 if EnumLoc == Ident1:
158 50000 63739 1.3 10.5 break
159 50000 61575 1.2 10.1 return IntParIO
kernprof
--------
kernprof will run your scripts under one of cProfiler or line_profiler in a
variety of convenient ways. It has a few main features:
* Encapsulation of profiling concerns. You do not have to modify your script
in order to initiate profiling and save the results.
* Robust script execution. Many scripts require things like __name__,
__file__, and sys.path to be set relative to it. A naive approach at
encapsulation would just use execfile(), but many scripts which rely on
that information will fail. kernprof will set those variables correctly
before executing the script.
* Easy executable location. If you are profiling an application installed on
your PATH, you can just give the name of the executable. If kernprof does
not find the given script in the current directory, it will search your
PATH for it.
* Inserting the profiler into __builtins__. Sometimes, you just want to
profile a small part of your code. With the [-b/--builtin] argument, the
Profiler will be instantiated and inserted into your __builtins__ with the
name "profile". It may be used as a decorator on the targeted functions.
* Pre-profiling setup. With the [-s/--setup] option, you can provide
a script which will be executed without profiling before executing the
main script. This is typically useful for cases where imports of large
libraries like wxPython or VTK are interfering with your results.
The results of profile script_to_profile.py will be written to
script_to_profile.py.prof by default. It will be a typical marshalled file that
can be read with pstats.Stats(). They may be interactively viewed with the
command::
$ python -m pstats script_to_profile.py.prof
Such files may also be viewed with graphical tools like kcachegrind_ through the
converter program pyprof2calltree_ or RunSnakeRun_.
.. _kcachegrind: http://kcachegrind.sourceforge.net/html/Home.html
.. _pyprof2calltree: http://pypi.python.org/pypi/pyprof2calltree/
.. _RunSnakeRun: http://www.vrplumber.com/programming/runsnakerun/
--
Robert Kern
"I have come to believe that the whole world is an enigma, a harmless enigma
that is made terrible by our own mad attempt to interpret it as though it had
an underlying truth."
-- Umberto Eco
More information about the Python-announce-list
mailing list