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
--
http://mail.python.org/mailman/listinfo/python-announce-list

       Support the Python Software Foundation:
       http://www.python.org/psf/donations.html

Reply via email to