\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}