blob: 0ee0767abbf4a2b70b39904f13e35e0685b29685 [file] [log] [blame]
Georg Brandl8ec7f652007-08-15 14:28:01 +00001
2:mod:`hotshot` --- High performance logging profiler
3====================================================
4
5.. module:: hotshot
6 :synopsis: High performance logging profiler, mostly written in C.
7.. moduleauthor:: Fred L. Drake, Jr. <fdrake@acm.org>
8.. sectionauthor:: Anthony Baxter <anthony@interlink.com.au>
9
10
11.. versionadded:: 2.2
12
13This module provides a nicer interface to the :mod:`_hotshot` C module. Hotshot
14is a replacement for the existing :mod:`profile` module. As it's written mostly
15in C, it should result in a much smaller performance impact than the existing
16:mod:`profile` module.
17
18.. note::
19
20 The :mod:`hotshot` module focuses on minimizing the overhead while profiling, at
Andrew M. Kuchling37304532008-06-13 19:38:18 +000021 the expense of long data post-processing times. For common usage it is
Georg Brandl8ec7f652007-08-15 14:28:01 +000022 recommended to use :mod:`cProfile` instead. :mod:`hotshot` is not maintained and
23 might be removed from the standard library in the future.
24
25.. versionchanged:: 2.5
Andrew M. Kuchling37304532008-06-13 19:38:18 +000026 The results should be more meaningful than in the past: the timing core
Georg Brandl8ec7f652007-08-15 14:28:01 +000027 contained a critical bug.
28
Georg Brandl38853142009-04-28 18:23:28 +000029.. note::
Georg Brandl8ec7f652007-08-15 14:28:01 +000030
31 The :mod:`hotshot` profiler does not yet work well with threads. It is useful to
32 use an unthreaded script to run the profiler over the code you're interested in
33 measuring if at all possible.
34
35
36.. class:: Profile(logfile[, lineevents[, linetimings]])
37
38 The profiler object. The argument *logfile* is the name of a log file to use for
39 logged profile data. The argument *lineevents* specifies whether to generate
40 events for every source line, or just on function call/return. It defaults to
41 ``0`` (only log function call/return). The argument *linetimings* specifies
42 whether to record timing information. It defaults to ``1`` (store timing
43 information).
44
45
46.. _hotshot-objects:
47
48Profile Objects
49---------------
50
51Profile objects have the following methods:
52
53
54.. method:: Profile.addinfo(key, value)
55
56 Add an arbitrary labelled value to the profile output.
57
58
59.. method:: Profile.close()
60
61 Close the logfile and terminate the profiler.
62
63
64.. method:: Profile.fileno()
65
66 Return the file descriptor of the profiler's log file.
67
68
69.. method:: Profile.run(cmd)
70
71 Profile an :keyword:`exec`\ -compatible string in the script environment. The
72 globals from the :mod:`__main__` module are used as both the globals and locals
73 for the script.
74
75
76.. method:: Profile.runcall(func, *args, **keywords)
77
78 Profile a single call of a callable. Additional positional and keyword arguments
79 may be passed along; the result of the call is returned, and exceptions are
80 allowed to propagate cleanly, while ensuring that profiling is disabled on the
81 way out.
82
83
84.. method:: Profile.runctx(cmd, globals, locals)
85
86 Evaluate an :keyword:`exec`\ -compatible string in a specific environment. The
87 string is compiled before profiling begins.
88
89
90.. method:: Profile.start()
91
92 Start the profiler.
93
94
95.. method:: Profile.stop()
96
97 Stop the profiler.
98
99
100Using hotshot data
101------------------
102
103.. module:: hotshot.stats
104 :synopsis: Statistical analysis for Hotshot
105
106
107.. versionadded:: 2.2
108
109This module loads hotshot profiling data into the standard :mod:`pstats` Stats
110objects.
111
112
113.. function:: load(filename)
114
115 Load hotshot data from *filename*. Returns an instance of the
116 :class:`pstats.Stats` class.
117
118
119.. seealso::
120
121 Module :mod:`profile`
122 The :mod:`profile` module's :class:`Stats` class
123
124
125.. _hotshot-example:
126
127Example Usage
128-------------
129
Ezio Melotti2f4f2c12009-12-19 22:59:01 +0000130Note that this example runs the Python "benchmark" pystones. It can take some
Georg Brandl8ec7f652007-08-15 14:28:01 +0000131time to run, and will produce large output files. ::
132
133 >>> import hotshot, hotshot.stats, test.pystone
134 >>> prof = hotshot.Profile("stones.prof")
135 >>> benchtime, stones = prof.runcall(test.pystone.pystones)
136 >>> prof.close()
137 >>> stats = hotshot.stats.load("stones.prof")
138 >>> stats.strip_dirs()
139 >>> stats.sort_stats('time', 'calls')
140 >>> stats.print_stats(20)
141 850004 function calls in 10.090 CPU seconds
142
143 Ordered by: internal time, call count
144
145 ncalls tottime percall cumtime percall filename:lineno(function)
146 1 3.295 3.295 10.090 10.090 pystone.py:79(Proc0)
147 150000 1.315 0.000 1.315 0.000 pystone.py:203(Proc7)
148 50000 1.313 0.000 1.463 0.000 pystone.py:229(Func2)
149 .
150 .
151 .
152