blob: 0d3408bf8049460bb8017e690e548df3d96227dd [file] [log] [blame]
Fred Drakebdcf91f2000-07-12 04:22:53 +00001\section{\module{gc} ---
2 Garbage Collector interface}
3
4\declaremodule{extension}{gc}
Fred Drakee5441912000-09-09 03:26:51 +00005\modulesynopsis{Interface to the cycle-detecting garbage collector.}
Neil Schemenauerb2c2c9e2000-10-04 16:34:09 +00006\moduleauthor{Neil Schemenauer}{nas@arctrix.com}
7\sectionauthor{Neil Schemenauer}{nas@arctrix.com}
Fred Drakebdcf91f2000-07-12 04:22:53 +00008
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00009This module provides an interface to the optional garbage collector. It
10provides the ability to disable the collector, tune the collection
Fred Drakebdcf91f2000-07-12 04:22:53 +000011frequency, and set debugging options. It also provides access to
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +000012unreachable objects that the collector found but cannot free. Since the
13collector supplements the reference counting already used in Python, you
14can disable the collector if you are sure your program does not create
15reference cycles. Automatic collection can be disabled by calling
16\code{gc.disable()}. To debug a leaking program call
Martin v. Löwis0f9679d2005-03-28 15:29:28 +000017\code{gc.set_debug(gc.DEBUG_LEAK)}. Notice that this includes
18\code{gc.DEBUG_SAVEALL}, causing garbage-collected objects to be
19saved in gc.garbage for inspection.
Fred Drakebdcf91f2000-07-12 04:22:53 +000020
21The \module{gc} module provides the following functions:
22
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +000023\begin{funcdesc}{enable}{}
24Enable automatic garbage collection.
25\end{funcdesc}
26
27\begin{funcdesc}{disable}{}
28Disable automatic garbage collection.
29\end{funcdesc}
30
31\begin{funcdesc}{isenabled}{}
32Returns true if automatic collection is enabled.
33\end{funcdesc}
34
Barry Warsawd3c38ff2006-03-07 09:46:03 +000035\begin{funcdesc}{collect}{\optional{generation}}
36With no arguments, run a full collection. The optional argument
37\var{generation} may be an integer specifying which generation to collect
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000038(from 0 to 2). A \exception{ValueError} is raised if the generation number
39is invalid.
Barry Warsawd3c38ff2006-03-07 09:46:03 +000040The number of unreachable objects found is returned.
41
42\versionchanged[The optional \var{generation} argument was added]{2.5}
Fred Drakebdcf91f2000-07-12 04:22:53 +000043\end{funcdesc}
44
45\begin{funcdesc}{set_debug}{flags}
46Set the garbage collection debugging flags.
47Debugging information will be written to \code{sys.stderr}. See below
48for a list of debugging flags which can be combined using bit
49operations to control debugging.
50\end{funcdesc}
51
52\begin{funcdesc}{get_debug}{}
53Return the debugging flags currently set.
54\end{funcdesc}
55
Fred Drakee4523c42002-07-10 19:21:07 +000056\begin{funcdesc}{get_objects}{}
57Returns a list of all objects tracked by the collector, excluding the
58list returned.
59\versionadded{2.2}
60\end{funcdesc}
61
Fred Drakebdcf91f2000-07-12 04:22:53 +000062\begin{funcdesc}{set_threshold}{threshold0\optional{,
63 threshold1\optional{, threshold2}}}
64Set the garbage collection thresholds (the collection frequency).
65Setting \var{threshold0} to zero disables collection.
66
67The GC classifies objects into three generations depending on how many
68collection sweeps they have survived. New objects are placed in the
69youngest generation (generation \code{0}). If an object survives a
70collection it is moved into the next older generation. Since
71generation \code{2} is the oldest generation, objects in that
72generation remain there after a collection. In order to decide when
73to run, the collector keeps track of the number object allocations and
74deallocations since the last collection. When the number of
75allocations minus the number of deallocations exceeds
76\var{threshold0}, collection starts. Initially only generation
77\code{0} is examined. If generation \code{0} has been examined more
78than \var{threshold1} times since generation \code{1} has been
79examined, then generation \code{1} is examined as well. Similarly,
80\var{threshold2} controls the number of collections of generation
81\code{1} before collecting generation \code{2}.
82\end{funcdesc}
83
Barry Warsawd3c38ff2006-03-07 09:46:03 +000084\begin{funcdesc}{get_count}{}
85Return the current collection counts as a tuple of
86\code{(\var{count0}, \var{count1}, \var{count2})}.
87\versionadded{2.5}
88\end{funcdesc}
89
Fred Drakebdcf91f2000-07-12 04:22:53 +000090\begin{funcdesc}{get_threshold}{}
91Return the current collection thresholds as a tuple of
92\code{(\var{threshold0}, \var{threshold1}, \var{threshold2})}.
93\end{funcdesc}
94
Martin v. Löwis560da622001-11-24 09:24:51 +000095\begin{funcdesc}{get_referrers}{*objs}
96Return the list of objects that directly refer to any of objs. This
97function will only locate those containers which support garbage
98collection; extension types which do refer to other objects but do not
99support garbage collection will not be found.
Martin v. Löwisef180dc2002-01-26 20:11:50 +0000100
101Note that objects which have already been dereferenced, but which live
102in cycles and have not yet been collected by the garbage collector can
103be listed among the resulting referrers. To get only currently live
104objects, call \function{collect()} before calling
105\function{get_referrers()}.
106
Armin Rigo3be6d5d2003-10-28 12:10:38 +0000107Care must be taken when using objects returned by
108\function{get_referrers()} because some of them could still be under
109construction and hence in a temporarily invalid state. Avoid using
110\function{get_referrers()} for any purpose other than debugging.
111
Martin v. Löwis560da622001-11-24 09:24:51 +0000112\versionadded{2.2}
113\end{funcdesc}
Fred Drakebdcf91f2000-07-12 04:22:53 +0000114
Tim Peters730f5532003-04-08 17:17:17 +0000115\begin{funcdesc}{get_referents}{*objs}
Tim Peters0f81ab62003-04-08 16:39:48 +0000116Return a list of objects directly referred to by any of the arguments.
Tim Peters730f5532003-04-08 17:17:17 +0000117The referents returned are those objects visited by the arguments'
Fred Drakede7ad2c2003-04-08 17:37:47 +0000118C-level \member{tp_traverse} methods (if any), and may not be all
119objects actually directly reachable. \member{tp_traverse} methods
Tim Peters0f81ab62003-04-08 16:39:48 +0000120are supported only by objects that support garbage collection, and are
121only required to visit objects that may be involved in a cycle. So,
122for example, if an integer is directly reachable from an argument, that
123integer object may or may not appear in the result list.
124
125\versionadded{2.3}
126\end{funcdesc}
127
Tim Petersaf0a8832001-11-18 04:51:17 +0000128The following variable is provided for read-only access (you can
129mutate its value but should not rebind it):
Fred Drakebdcf91f2000-07-12 04:22:53 +0000130
131\begin{datadesc}{garbage}
132A list of objects which the collector found to be unreachable
Tim Peters169ded02001-11-03 19:57:21 +0000133but could not be freed (uncollectable objects). By default, this list
134contains only objects with \method{__del__()} methods.\footnote{Prior to
135 Python 2.2, the list contained all instance objects in unreachable
136 cycles, not only those with \method{__del__()} methods.}
137Objects that have
Tim Petersaf0a8832001-11-18 04:51:17 +0000138\method{__del__()} methods and are part of a reference cycle cause
139the entire reference cycle to be uncollectable, including objects
140not necessarily in the cycle but reachable only from it. Python doesn't
141collect such cycles automatically because, in general, it isn't possible
142for Python to guess a safe order in which to run the \method{__del__()}
143methods. If you know a safe order, you can force the issue by examining
144the \var{garbage} list, and explicitly breaking cycles due to your
145objects within the list. Note that these objects are kept alive even
146so by virtue of being in the \var{garbage} list, so they should be
147removed from \var{garbage} too. For example, after breaking cycles, do
148\code{del gc.garbage[:]} to empty the list. It's generally better
149to avoid the issue by not creating cycles containing objects with
150\method{__del__()} methods, and \var{garbage} can be examined in that
Fred Drakedda7dcb2001-12-14 21:19:08 +0000151case to verify that no such cycles are being created.
Tim Petersaf0a8832001-11-18 04:51:17 +0000152
153If \constant{DEBUG_SAVEALL} is set, then all unreachable objects will
Neil Schemenauer544de1e2000-09-22 15:22:38 +0000154be added to this list rather than freed.
Fred Drakebdcf91f2000-07-12 04:22:53 +0000155\end{datadesc}
156
157
158The following constants are provided for use with
159\function{set_debug()}:
160
161\begin{datadesc}{DEBUG_STATS}
162Print statistics during collection. This information can
163be useful when tuning the collection frequency.
164\end{datadesc}
165
166\begin{datadesc}{DEBUG_COLLECTABLE}
167Print information on collectable objects found.
168\end{datadesc}
169
170\begin{datadesc}{DEBUG_UNCOLLECTABLE}
171Print information of uncollectable objects found (objects which are
172not reachable but cannot be freed by the collector). These objects
173will be added to the \code{garbage} list.
174\end{datadesc}
175
176\begin{datadesc}{DEBUG_INSTANCES}
177When \constant{DEBUG_COLLECTABLE} or \constant{DEBUG_UNCOLLECTABLE} is
178set, print information about instance objects found.
179\end{datadesc}
180
181\begin{datadesc}{DEBUG_OBJECTS}
182When \constant{DEBUG_COLLECTABLE} or \constant{DEBUG_UNCOLLECTABLE} is
183set, print information about objects other than instance objects found.
184\end{datadesc}
185
Neil Schemenauer544de1e2000-09-22 15:22:38 +0000186\begin{datadesc}{DEBUG_SAVEALL}
187When set, all unreachable objects found will be appended to
188\var{garbage} rather than being freed. This can be useful for debugging
189a leaking program.
190\end{datadesc}
191
Fred Drakebdcf91f2000-07-12 04:22:53 +0000192\begin{datadesc}{DEBUG_LEAK}
193The debugging flags necessary for the collector to print
194information about a leaking program (equal to \code{DEBUG_COLLECTABLE |
Tim Petersaf0a8832001-11-18 04:51:17 +0000195DEBUG_UNCOLLECTABLE | DEBUG_INSTANCES | DEBUG_OBJECTS | DEBUG_SAVEALL}).
Fred Drakebdcf91f2000-07-12 04:22:53 +0000196\end{datadesc}