summaryrefslogtreecommitdiffstats
path: root/Doc/lib/libhotshot.tex
blob: 05bc067ed1a4ce6ce6ff095caeed74e9f114094d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
\section{\module{hotshot} ---
         High performance logging profiler}

\declaremodule{standard}{hotshot}
\modulesynopsis{High performance logging profiler, mostly written in C.}
\moduleauthor{Fred L. Drake, Jr.}{fdrake@acm.org}
\sectionauthor{Anthony Baxter}{anthony@interlink.com.au}

\versionadded{2.2}


This module provides a nicer interface to the \module{_hotshot} C module.
Hotshot is a replacement for the existing \refmodule{profile} module. As it's
written mostly in C, it should result in a much smaller performance impact
than the existing \refmodule{profile} module.

\begin{classdesc}{Profile}{logfile\optional{,
                           lineevents\code{=0}\optional{,
                           linetimings\code{=1}}}}
The profiler object. The argument \var{logfile} is the name of a log
file to use for logged profile data. The argument \var{lineevents}
specifies whether to generate events for every source line, or just on
function call/return. It defaults to \code{0} (only log function
call/return). The argument \var{linetimings} specifies whether to
record timing information. It defaults to \code{1} (store timing
information).
\end{classdesc}


\subsection{Profile Objects \label{hotshot-objects}}

Profile objects have the following methods:

\begin{methoddesc}{addinfo}{key, value}
Add an arbitrary labelled value to the profile output.
\end{methoddesc}

\begin{methoddesc}{close}{}
Close the logfile and terminate the profiler.
\end{methoddesc}

\begin{methoddesc}{fileno}{}
Return the file descriptor of the profiler's log file.
\end{methoddesc}

\begin{methoddesc}{run}{cmd}
Profile an \keyword{exec}-compatible string in the script environment.
The globals from the \refmodule[main]{__main__} module are used as
both the globals and locals for the script.
\end{methoddesc}

\begin{methoddesc}{runcall}{func, *args, **keywords}
Profile a single call of a callable.
Additional positional and keyword arguments may be passed
along; the result of the call is returned, and exceptions are
allowed to propogate cleanly, while ensuring that profiling is
disabled on the way out.
\end{methoddesc}


\begin{methoddesc}{runctx}{cmd, globals, locals}
Evaluate an \keyword{exec}-compatible string in a specific environment.
The string is compiled before profiling begins.
\end{methoddesc}

\begin{methoddesc}{start}{}
Start the profiler.
\end{methoddesc}

\begin{methoddesc}{stop}{}
Stop the profiler.
\end{methoddesc}


\subsection{Using hotshot data}

\declaremodule{standard}{hotshot.stats}
\modulesynopsis{Statistical analysis for Hotshot}

\versionadded{2.2}

This module loads hotshot profiling data into the standard \module{pstats}
Stats objects.

\begin{funcdesc}{load}{filename}
Load hotshot data from \var{filename}. Returns an instance
of the \class{pstats.Stats} class.
\end{funcdesc}

\begin{seealso}
  \seemodule{profile}{The \module{profile} module's \class{Stats} class}
\end{seealso}


\subsection{Example Usage \label{hotshot-example}}

Note that this example runs the python ``benchmark'' pystones.  It can
take some time to run, and will produce large output files.

\begin{verbatim}
>>> import hotshot, hotshot.stats, test.pystone
>>> prof = hotshot.Profile("stones.prof")
>>> benchtime, stones = prof.runcall(test.pystone.pystones)
>>> prof.close()
>>> stats = hotshot.stats.load("stones.prof")
>>> stats.strip_dirs()
>>> stats.sort_stats('time', 'calls')
>>> stats.print_stats(20)
         850004 function calls in 10.090 CPU seconds

   Ordered by: internal time, call count

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    3.295    3.295   10.090   10.090 pystone.py:79(Proc0)
   150000    1.315    0.000    1.315    0.000 pystone.py:203(Proc7)
    50000    1.313    0.000    1.463    0.000 pystone.py:229(Func2)
 .
 .
 .
\end{verbatim}