1 | \chapter{Initialization, Finalization, and Threads
|
---|
2 | \label{initialization}}
|
---|
3 |
|
---|
4 | \begin{cfuncdesc}{void}{Py_Initialize}{}
|
---|
5 | Initialize the Python interpreter. In an application embedding
|
---|
6 | Python, this should be called before using any other Python/C API
|
---|
7 | functions; with the exception of
|
---|
8 | \cfunction{Py_SetProgramName()}\ttindex{Py_SetProgramName()},
|
---|
9 | \cfunction{PyEval_InitThreads()}\ttindex{PyEval_InitThreads()},
|
---|
10 | \cfunction{PyEval_ReleaseLock()}\ttindex{PyEval_ReleaseLock()},
|
---|
11 | and \cfunction{PyEval_AcquireLock()}\ttindex{PyEval_AcquireLock()}.
|
---|
12 | This initializes the table of loaded modules (\code{sys.modules}),
|
---|
13 | and\withsubitem{(in module sys)}{\ttindex{modules}\ttindex{path}}
|
---|
14 | creates the fundamental modules
|
---|
15 | \module{__builtin__}\refbimodindex{__builtin__},
|
---|
16 | \module{__main__}\refbimodindex{__main__} and
|
---|
17 | \module{sys}\refbimodindex{sys}. It also initializes the module
|
---|
18 | search\indexiii{module}{search}{path} path (\code{sys.path}).
|
---|
19 | It does not set \code{sys.argv}; use
|
---|
20 | \cfunction{PySys_SetArgv()}\ttindex{PySys_SetArgv()} for that. This
|
---|
21 | is a no-op when called for a second time (without calling
|
---|
22 | \cfunction{Py_Finalize()}\ttindex{Py_Finalize()} first). There is
|
---|
23 | no return value; it is a fatal error if the initialization fails.
|
---|
24 | \end{cfuncdesc}
|
---|
25 |
|
---|
26 | \begin{cfuncdesc}{void}{Py_InitializeEx}{int initsigs}
|
---|
27 | This function works like \cfunction{Py_Initialize()} if
|
---|
28 | \var{initsigs} is 1. If \var{initsigs} is 0, it skips
|
---|
29 | initialization registration of signal handlers, which
|
---|
30 | might be useful when Python is embedded. \versionadded{2.4}
|
---|
31 | \end{cfuncdesc}
|
---|
32 |
|
---|
33 | \begin{cfuncdesc}{int}{Py_IsInitialized}{}
|
---|
34 | Return true (nonzero) when the Python interpreter has been
|
---|
35 | initialized, false (zero) if not. After \cfunction{Py_Finalize()}
|
---|
36 | is called, this returns false until \cfunction{Py_Initialize()} is
|
---|
37 | called again.
|
---|
38 | \end{cfuncdesc}
|
---|
39 |
|
---|
40 | \begin{cfuncdesc}{void}{Py_Finalize}{}
|
---|
41 | Undo all initializations made by \cfunction{Py_Initialize()} and
|
---|
42 | subsequent use of Python/C API functions, and destroy all
|
---|
43 | sub-interpreters (see \cfunction{Py_NewInterpreter()} below) that
|
---|
44 | were created and not yet destroyed since the last call to
|
---|
45 | \cfunction{Py_Initialize()}. Ideally, this frees all memory
|
---|
46 | allocated by the Python interpreter. This is a no-op when called
|
---|
47 | for a second time (without calling \cfunction{Py_Initialize()} again
|
---|
48 | first). There is no return value; errors during finalization are
|
---|
49 | ignored.
|
---|
50 |
|
---|
51 | This function is provided for a number of reasons. An embedding
|
---|
52 | application might want to restart Python without having to restart
|
---|
53 | the application itself. An application that has loaded the Python
|
---|
54 | interpreter from a dynamically loadable library (or DLL) might want
|
---|
55 | to free all memory allocated by Python before unloading the
|
---|
56 | DLL. During a hunt for memory leaks in an application a developer
|
---|
57 | might want to free all memory allocated by Python before exiting
|
---|
58 | from the application.
|
---|
59 |
|
---|
60 | \strong{Bugs and caveats:} The destruction of modules and objects in
|
---|
61 | modules is done in random order; this may cause destructors
|
---|
62 | (\method{__del__()} methods) to fail when they depend on other
|
---|
63 | objects (even functions) or modules. Dynamically loaded extension
|
---|
64 | modules loaded by Python are not unloaded. Small amounts of memory
|
---|
65 | allocated by the Python interpreter may not be freed (if you find a
|
---|
66 | leak, please report it). Memory tied up in circular references
|
---|
67 | between objects is not freed. Some memory allocated by extension
|
---|
68 | modules may not be freed. Some extensions may not work properly if
|
---|
69 | their initialization routine is called more than once; this can
|
---|
70 | happen if an application calls \cfunction{Py_Initialize()} and
|
---|
71 | \cfunction{Py_Finalize()} more than once.
|
---|
72 | \end{cfuncdesc}
|
---|
73 |
|
---|
74 | \begin{cfuncdesc}{PyThreadState*}{Py_NewInterpreter}{}
|
---|
75 | Create a new sub-interpreter. This is an (almost) totally separate
|
---|
76 | environment for the execution of Python code. In particular, the
|
---|
77 | new interpreter has separate, independent versions of all imported
|
---|
78 | modules, including the fundamental modules
|
---|
79 | \module{__builtin__}\refbimodindex{__builtin__},
|
---|
80 | \module{__main__}\refbimodindex{__main__} and
|
---|
81 | \module{sys}\refbimodindex{sys}. The table of loaded modules
|
---|
82 | (\code{sys.modules}) and the module search path (\code{sys.path})
|
---|
83 | are also separate. The new environment has no \code{sys.argv}
|
---|
84 | variable. It has new standard I/O stream file objects
|
---|
85 | \code{sys.stdin}, \code{sys.stdout} and \code{sys.stderr} (however
|
---|
86 | these refer to the same underlying \ctype{FILE} structures in the C
|
---|
87 | library).
|
---|
88 | \withsubitem{(in module sys)}{
|
---|
89 | \ttindex{stdout}\ttindex{stderr}\ttindex{stdin}}
|
---|
90 |
|
---|
91 | The return value points to the first thread state created in the new
|
---|
92 | sub-interpreter. This thread state is made in the current thread
|
---|
93 | state. Note that no actual thread is created; see the discussion of
|
---|
94 | thread states below. If creation of the new interpreter is
|
---|
95 | unsuccessful, \NULL{} is returned; no exception is set since the
|
---|
96 | exception state is stored in the current thread state and there may
|
---|
97 | not be a current thread state. (Like all other Python/C API
|
---|
98 | functions, the global interpreter lock must be held before calling
|
---|
99 | this function and is still held when it returns; however, unlike
|
---|
100 | most other Python/C API functions, there needn't be a current thread
|
---|
101 | state on entry.)
|
---|
102 |
|
---|
103 | Extension modules are shared between (sub-)interpreters as follows:
|
---|
104 | the first time a particular extension is imported, it is initialized
|
---|
105 | normally, and a (shallow) copy of its module's dictionary is
|
---|
106 | squirreled away. When the same extension is imported by another
|
---|
107 | (sub-)interpreter, a new module is initialized and filled with the
|
---|
108 | contents of this copy; the extension's \code{init} function is not
|
---|
109 | called. Note that this is different from what happens when an
|
---|
110 | extension is imported after the interpreter has been completely
|
---|
111 | re-initialized by calling
|
---|
112 | \cfunction{Py_Finalize()}\ttindex{Py_Finalize()} and
|
---|
113 | \cfunction{Py_Initialize()}\ttindex{Py_Initialize()}; in that case,
|
---|
114 | the extension's \code{init\var{module}} function \emph{is} called
|
---|
115 | again.
|
---|
116 |
|
---|
117 | \strong{Bugs and caveats:} Because sub-interpreters (and the main
|
---|
118 | interpreter) are part of the same process, the insulation between
|
---|
119 | them isn't perfect --- for example, using low-level file operations
|
---|
120 | like \withsubitem{(in module os)}{\ttindex{close()}}
|
---|
121 | \function{os.close()} they can (accidentally or maliciously) affect
|
---|
122 | each other's open files. Because of the way extensions are shared
|
---|
123 | between (sub-)interpreters, some extensions may not work properly;
|
---|
124 | this is especially likely when the extension makes use of (static)
|
---|
125 | global variables, or when the extension manipulates its module's
|
---|
126 | dictionary after its initialization. It is possible to insert
|
---|
127 | objects created in one sub-interpreter into a namespace of another
|
---|
128 | sub-interpreter; this should be done with great care to avoid
|
---|
129 | sharing user-defined functions, methods, instances or classes
|
---|
130 | between sub-interpreters, since import operations executed by such
|
---|
131 | objects may affect the wrong (sub-)interpreter's dictionary of
|
---|
132 | loaded modules. (XXX This is a hard-to-fix bug that will be
|
---|
133 | addressed in a future release.)
|
---|
134 |
|
---|
135 | Also note that the use of this functionality is incompatible with
|
---|
136 | extension modules such as PyObjC and ctypes that use the
|
---|
137 | \cfunction{PyGILState_*} APIs (and this is inherent in the way the
|
---|
138 | \cfunction{PyGILState_*} functions work). Simple things may work,
|
---|
139 | but confusing behavior will always be near.
|
---|
140 | \end{cfuncdesc}
|
---|
141 |
|
---|
142 | \begin{cfuncdesc}{void}{Py_EndInterpreter}{PyThreadState *tstate}
|
---|
143 | Destroy the (sub-)interpreter represented by the given thread state.
|
---|
144 | The given thread state must be the current thread state. See the
|
---|
145 | discussion of thread states below. When the call returns, the
|
---|
146 | current thread state is \NULL. All thread states associated with
|
---|
147 | this interpreter are destroyed. (The global interpreter lock must
|
---|
148 | be held before calling this function and is still held when it
|
---|
149 | returns.) \cfunction{Py_Finalize()}\ttindex{Py_Finalize()} will
|
---|
150 | destroy all sub-interpreters that haven't been explicitly destroyed
|
---|
151 | at that point.
|
---|
152 | \end{cfuncdesc}
|
---|
153 |
|
---|
154 | \begin{cfuncdesc}{void}{Py_SetProgramName}{char *name}
|
---|
155 | This function should be called before
|
---|
156 | \cfunction{Py_Initialize()}\ttindex{Py_Initialize()} is called
|
---|
157 | for the first time, if it is called at all. It tells the
|
---|
158 | interpreter the value of the \code{argv[0]} argument to the
|
---|
159 | \cfunction{main()}\ttindex{main()} function of the program. This is
|
---|
160 | used by \cfunction{Py_GetPath()}\ttindex{Py_GetPath()} and some
|
---|
161 | other functions below to find the Python run-time libraries relative
|
---|
162 | to the interpreter executable. The default value is
|
---|
163 | \code{'python'}. The argument should point to a zero-terminated
|
---|
164 | character string in static storage whose contents will not change
|
---|
165 | for the duration of the program's execution. No code in the Python
|
---|
166 | interpreter will change the contents of this storage.
|
---|
167 | \end{cfuncdesc}
|
---|
168 |
|
---|
169 | \begin{cfuncdesc}{char*}{Py_GetProgramName}{}
|
---|
170 | Return the program name set with
|
---|
171 | \cfunction{Py_SetProgramName()}\ttindex{Py_SetProgramName()}, or the
|
---|
172 | default. The returned string points into static storage; the caller
|
---|
173 | should not modify its value.
|
---|
174 | \end{cfuncdesc}
|
---|
175 |
|
---|
176 | \begin{cfuncdesc}{char*}{Py_GetPrefix}{}
|
---|
177 | Return the \emph{prefix} for installed platform-independent files.
|
---|
178 | This is derived through a number of complicated rules from the
|
---|
179 | program name set with \cfunction{Py_SetProgramName()} and some
|
---|
180 | environment variables; for example, if the program name is
|
---|
181 | \code{'/usr/local/bin/python'}, the prefix is \code{'/usr/local'}.
|
---|
182 | The returned string points into static storage; the caller should
|
---|
183 | not modify its value. This corresponds to the \makevar{prefix}
|
---|
184 | variable in the top-level \file{Makefile} and the
|
---|
185 | \longprogramopt{prefix} argument to the \program{configure} script
|
---|
186 | at build time. The value is available to Python code as
|
---|
187 | \code{sys.prefix}. It is only useful on \UNIX{}. See also the next
|
---|
188 | function.
|
---|
189 | \end{cfuncdesc}
|
---|
190 |
|
---|
191 | \begin{cfuncdesc}{char*}{Py_GetExecPrefix}{}
|
---|
192 | Return the \emph{exec-prefix} for installed
|
---|
193 | platform-\emph{de}pendent files. This is derived through a number
|
---|
194 | of complicated rules from the program name set with
|
---|
195 | \cfunction{Py_SetProgramName()} and some environment variables; for
|
---|
196 | example, if the program name is \code{'/usr/local/bin/python'}, the
|
---|
197 | exec-prefix is \code{'/usr/local'}. The returned string points into
|
---|
198 | static storage; the caller should not modify its value. This
|
---|
199 | corresponds to the \makevar{exec_prefix} variable in the top-level
|
---|
200 | \file{Makefile} and the \longprogramopt{exec-prefix} argument to the
|
---|
201 | \program{configure} script at build time. The value is available
|
---|
202 | to Python code as \code{sys.exec_prefix}. It is only useful on
|
---|
203 | \UNIX.
|
---|
204 |
|
---|
205 | Background: The exec-prefix differs from the prefix when platform
|
---|
206 | dependent files (such as executables and shared libraries) are
|
---|
207 | installed in a different directory tree. In a typical installation,
|
---|
208 | platform dependent files may be installed in the
|
---|
209 | \file{/usr/local/plat} subtree while platform independent may be
|
---|
210 | installed in \file{/usr/local}.
|
---|
211 |
|
---|
212 | Generally speaking, a platform is a combination of hardware and
|
---|
213 | software families, e.g. Sparc machines running the Solaris 2.x
|
---|
214 | operating system are considered the same platform, but Intel
|
---|
215 | machines running Solaris 2.x are another platform, and Intel
|
---|
216 | machines running Linux are yet another platform. Different major
|
---|
217 | revisions of the same operating system generally also form different
|
---|
218 | platforms. Non-\UNIX{} operating systems are a different story; the
|
---|
219 | installation strategies on those systems are so different that the
|
---|
220 | prefix and exec-prefix are meaningless, and set to the empty string.
|
---|
221 | Note that compiled Python bytecode files are platform independent
|
---|
222 | (but not independent from the Python version by which they were
|
---|
223 | compiled!).
|
---|
224 |
|
---|
225 | System administrators will know how to configure the \program{mount}
|
---|
226 | or \program{automount} programs to share \file{/usr/local} between
|
---|
227 | platforms while having \file{/usr/local/plat} be a different
|
---|
228 | filesystem for each platform.
|
---|
229 | \end{cfuncdesc}
|
---|
230 |
|
---|
231 | \begin{cfuncdesc}{char*}{Py_GetProgramFullPath}{}
|
---|
232 | Return the full program name of the Python executable; this is
|
---|
233 | computed as a side-effect of deriving the default module search path
|
---|
234 | from the program name (set by
|
---|
235 | \cfunction{Py_SetProgramName()}\ttindex{Py_SetProgramName()} above).
|
---|
236 | The returned string points into static storage; the caller should
|
---|
237 | not modify its value. The value is available to Python code as
|
---|
238 | \code{sys.executable}.
|
---|
239 | \withsubitem{(in module sys)}{\ttindex{executable}}
|
---|
240 | \end{cfuncdesc}
|
---|
241 |
|
---|
242 | \begin{cfuncdesc}{char*}{Py_GetPath}{}
|
---|
243 | \indexiii{module}{search}{path}
|
---|
244 | Return the default module search path; this is computed from the
|
---|
245 | program name (set by \cfunction{Py_SetProgramName()} above) and some
|
---|
246 | environment variables. The returned string consists of a series of
|
---|
247 | directory names separated by a platform dependent delimiter
|
---|
248 | character. The delimiter character is \character{:} on \UNIX and Mac OS X,
|
---|
249 | \character{;} on Windows. The returned string points into
|
---|
250 | static storage; the caller should not modify its value. The value
|
---|
251 | is available to Python code as the list
|
---|
252 | \code{sys.path}\withsubitem{(in module sys)}{\ttindex{path}}, which
|
---|
253 | may be modified to change the future search path for loaded
|
---|
254 | modules.
|
---|
255 |
|
---|
256 | % XXX should give the exact rules
|
---|
257 | \end{cfuncdesc}
|
---|
258 |
|
---|
259 | \begin{cfuncdesc}{const char*}{Py_GetVersion}{}
|
---|
260 | Return the version of this Python interpreter. This is a string
|
---|
261 | that looks something like
|
---|
262 |
|
---|
263 | \begin{verbatim}
|
---|
264 | "1.5 (#67, Dec 31 1997, 22:34:28) [GCC 2.7.2.2]"
|
---|
265 | \end{verbatim}
|
---|
266 |
|
---|
267 | The first word (up to the first space character) is the current
|
---|
268 | Python version; the first three characters are the major and minor
|
---|
269 | version separated by a period. The returned string points into
|
---|
270 | static storage; the caller should not modify its value. The value
|
---|
271 | is available to Python code as \code{sys.version}.
|
---|
272 | \withsubitem{(in module sys)}{\ttindex{version}}
|
---|
273 | \end{cfuncdesc}
|
---|
274 |
|
---|
275 | \begin{cfuncdesc}{const char*}{Py_GetBuildNumber}{}
|
---|
276 | Return a string representing the Subversion revision that this Python
|
---|
277 | executable was built from. This number is a string because it may contain a
|
---|
278 | trailing 'M' if Python was built from a mixed revision source tree.
|
---|
279 | \versionadded{2.5}
|
---|
280 | \end{cfuncdesc}
|
---|
281 |
|
---|
282 | \begin{cfuncdesc}{const char*}{Py_GetPlatform}{}
|
---|
283 | Return the platform identifier for the current platform. On \UNIX,
|
---|
284 | this is formed from the ``official'' name of the operating system,
|
---|
285 | converted to lower case, followed by the major revision number;
|
---|
286 | e.g., for Solaris 2.x, which is also known as SunOS 5.x, the value
|
---|
287 | is \code{'sunos5'}. On Mac OS X, it is \code{'darwin'}. On Windows,
|
---|
288 | it is \code{'win'}. The returned string points into static storage;
|
---|
289 | the caller should not modify its value. The value is available to
|
---|
290 | Python code as \code{sys.platform}.
|
---|
291 | \withsubitem{(in module sys)}{\ttindex{platform}}
|
---|
292 | \end{cfuncdesc}
|
---|
293 |
|
---|
294 | \begin{cfuncdesc}{const char*}{Py_GetCopyright}{}
|
---|
295 | Return the official copyright string for the current Python version,
|
---|
296 | for example
|
---|
297 |
|
---|
298 | \code{'Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam'}
|
---|
299 |
|
---|
300 | The returned string points into static storage; the caller should
|
---|
301 | not modify its value. The value is available to Python code as
|
---|
302 | \code{sys.copyright}.
|
---|
303 | \withsubitem{(in module sys)}{\ttindex{copyright}}
|
---|
304 | \end{cfuncdesc}
|
---|
305 |
|
---|
306 | \begin{cfuncdesc}{const char*}{Py_GetCompiler}{}
|
---|
307 | Return an indication of the compiler used to build the current
|
---|
308 | Python version, in square brackets, for example:
|
---|
309 |
|
---|
310 | \begin{verbatim}
|
---|
311 | "[GCC 2.7.2.2]"
|
---|
312 | \end{verbatim}
|
---|
313 |
|
---|
314 | The returned string points into static storage; the caller should
|
---|
315 | not modify its value. The value is available to Python code as part
|
---|
316 | of the variable \code{sys.version}.
|
---|
317 | \withsubitem{(in module sys)}{\ttindex{version}}
|
---|
318 | \end{cfuncdesc}
|
---|
319 |
|
---|
320 | \begin{cfuncdesc}{const char*}{Py_GetBuildInfo}{}
|
---|
321 | Return information about the sequence number and build date and time
|
---|
322 | of the current Python interpreter instance, for example
|
---|
323 |
|
---|
324 | \begin{verbatim}
|
---|
325 | "#67, Aug 1 1997, 22:34:28"
|
---|
326 | \end{verbatim}
|
---|
327 |
|
---|
328 | The returned string points into static storage; the caller should
|
---|
329 | not modify its value. The value is available to Python code as part
|
---|
330 | of the variable \code{sys.version}.
|
---|
331 | \withsubitem{(in module sys)}{\ttindex{version}}
|
---|
332 | \end{cfuncdesc}
|
---|
333 |
|
---|
334 | \begin{cfuncdesc}{void}{PySys_SetArgv}{int argc, char **argv}
|
---|
335 | Set \code{sys.argv} based on \var{argc} and \var{argv}. These
|
---|
336 | parameters are similar to those passed to the program's
|
---|
337 | \cfunction{main()}\ttindex{main()} function with the difference that
|
---|
338 | the first entry should refer to the script file to be executed
|
---|
339 | rather than the executable hosting the Python interpreter. If there
|
---|
340 | isn't a script that will be run, the first entry in \var{argv} can
|
---|
341 | be an empty string. If this function fails to initialize
|
---|
342 | \code{sys.argv}, a fatal condition is signalled using
|
---|
343 | \cfunction{Py_FatalError()}\ttindex{Py_FatalError()}.
|
---|
344 | \withsubitem{(in module sys)}{\ttindex{argv}}
|
---|
345 | % XXX impl. doesn't seem consistent in allowing 0/NULL for the params;
|
---|
346 | % check w/ Guido.
|
---|
347 | \end{cfuncdesc}
|
---|
348 |
|
---|
349 | % XXX Other PySys thingies (doesn't really belong in this chapter)
|
---|
350 |
|
---|
351 | \section{Thread State and the Global Interpreter Lock
|
---|
352 | \label{threads}}
|
---|
353 |
|
---|
354 | \index{global interpreter lock}
|
---|
355 | \index{interpreter lock}
|
---|
356 | \index{lock, interpreter}
|
---|
357 |
|
---|
358 | The Python interpreter is not fully thread safe. In order to support
|
---|
359 | multi-threaded Python programs, there's a global lock that must be
|
---|
360 | held by the current thread before it can safely access Python objects.
|
---|
361 | Without the lock, even the simplest operations could cause problems in
|
---|
362 | a multi-threaded program: for example, when two threads simultaneously
|
---|
363 | increment the reference count of the same object, the reference count
|
---|
364 | could end up being incremented only once instead of twice.
|
---|
365 |
|
---|
366 | Therefore, the rule exists that only the thread that has acquired the
|
---|
367 | global interpreter lock may operate on Python objects or call Python/C
|
---|
368 | API functions. In order to support multi-threaded Python programs,
|
---|
369 | the interpreter regularly releases and reacquires the lock --- by
|
---|
370 | default, every 100 bytecode instructions (this can be changed with
|
---|
371 | \withsubitem{(in module sys)}{\ttindex{setcheckinterval()}}
|
---|
372 | \function{sys.setcheckinterval()}). The lock is also released and
|
---|
373 | reacquired around potentially blocking I/O operations like reading or
|
---|
374 | writing a file, so that other threads can run while the thread that
|
---|
375 | requests the I/O is waiting for the I/O operation to complete.
|
---|
376 |
|
---|
377 | The Python interpreter needs to keep some bookkeeping information
|
---|
378 | separate per thread --- for this it uses a data structure called
|
---|
379 | \ctype{PyThreadState}\ttindex{PyThreadState}. There's one global
|
---|
380 | variable, however: the pointer to the current
|
---|
381 | \ctype{PyThreadState}\ttindex{PyThreadState} structure. While most
|
---|
382 | thread packages have a way to store ``per-thread global data,''
|
---|
383 | Python's internal platform independent thread abstraction doesn't
|
---|
384 | support this yet. Therefore, the current thread state must be
|
---|
385 | manipulated explicitly.
|
---|
386 |
|
---|
387 | This is easy enough in most cases. Most code manipulating the global
|
---|
388 | interpreter lock has the following simple structure:
|
---|
389 |
|
---|
390 | \begin{verbatim}
|
---|
391 | Save the thread state in a local variable.
|
---|
392 | Release the interpreter lock.
|
---|
393 | ...Do some blocking I/O operation...
|
---|
394 | Reacquire the interpreter lock.
|
---|
395 | Restore the thread state from the local variable.
|
---|
396 | \end{verbatim}
|
---|
397 |
|
---|
398 | This is so common that a pair of macros exists to simplify it:
|
---|
399 |
|
---|
400 | \begin{verbatim}
|
---|
401 | Py_BEGIN_ALLOW_THREADS
|
---|
402 | ...Do some blocking I/O operation...
|
---|
403 | Py_END_ALLOW_THREADS
|
---|
404 | \end{verbatim}
|
---|
405 |
|
---|
406 | The
|
---|
407 | \csimplemacro{Py_BEGIN_ALLOW_THREADS}\ttindex{Py_BEGIN_ALLOW_THREADS}
|
---|
408 | macro opens a new block and declares a hidden local variable; the
|
---|
409 | \csimplemacro{Py_END_ALLOW_THREADS}\ttindex{Py_END_ALLOW_THREADS}
|
---|
410 | macro closes the block. Another advantage of using these two macros
|
---|
411 | is that when Python is compiled without thread support, they are
|
---|
412 | defined empty, thus saving the thread state and lock manipulations.
|
---|
413 |
|
---|
414 | When thread support is enabled, the block above expands to the
|
---|
415 | following code:
|
---|
416 |
|
---|
417 | \begin{verbatim}
|
---|
418 | PyThreadState *_save;
|
---|
419 |
|
---|
420 | _save = PyEval_SaveThread();
|
---|
421 | ...Do some blocking I/O operation...
|
---|
422 | PyEval_RestoreThread(_save);
|
---|
423 | \end{verbatim}
|
---|
424 |
|
---|
425 | Using even lower level primitives, we can get roughly the same effect
|
---|
426 | as follows:
|
---|
427 |
|
---|
428 | \begin{verbatim}
|
---|
429 | PyThreadState *_save;
|
---|
430 |
|
---|
431 | _save = PyThreadState_Swap(NULL);
|
---|
432 | PyEval_ReleaseLock();
|
---|
433 | ...Do some blocking I/O operation...
|
---|
434 | PyEval_AcquireLock();
|
---|
435 | PyThreadState_Swap(_save);
|
---|
436 | \end{verbatim}
|
---|
437 |
|
---|
438 | There are some subtle differences; in particular,
|
---|
439 | \cfunction{PyEval_RestoreThread()}\ttindex{PyEval_RestoreThread()} saves
|
---|
440 | and restores the value of the global variable
|
---|
441 | \cdata{errno}\ttindex{errno}, since the lock manipulation does not
|
---|
442 | guarantee that \cdata{errno} is left alone. Also, when thread support
|
---|
443 | is disabled,
|
---|
444 | \cfunction{PyEval_SaveThread()}\ttindex{PyEval_SaveThread()} and
|
---|
445 | \cfunction{PyEval_RestoreThread()} don't manipulate the lock; in this
|
---|
446 | case, \cfunction{PyEval_ReleaseLock()}\ttindex{PyEval_ReleaseLock()} and
|
---|
447 | \cfunction{PyEval_AcquireLock()}\ttindex{PyEval_AcquireLock()} are not
|
---|
448 | available. This is done so that dynamically loaded extensions
|
---|
449 | compiled with thread support enabled can be loaded by an interpreter
|
---|
450 | that was compiled with disabled thread support.
|
---|
451 |
|
---|
452 | The global interpreter lock is used to protect the pointer to the
|
---|
453 | current thread state. When releasing the lock and saving the thread
|
---|
454 | state, the current thread state pointer must be retrieved before the
|
---|
455 | lock is released (since another thread could immediately acquire the
|
---|
456 | lock and store its own thread state in the global variable).
|
---|
457 | Conversely, when acquiring the lock and restoring the thread state,
|
---|
458 | the lock must be acquired before storing the thread state pointer.
|
---|
459 |
|
---|
460 | Why am I going on with so much detail about this? Because when
|
---|
461 | threads are created from C, they don't have the global interpreter
|
---|
462 | lock, nor is there a thread state data structure for them. Such
|
---|
463 | threads must bootstrap themselves into existence, by first creating a
|
---|
464 | thread state data structure, then acquiring the lock, and finally
|
---|
465 | storing their thread state pointer, before they can start using the
|
---|
466 | Python/C API. When they are done, they should reset the thread state
|
---|
467 | pointer, release the lock, and finally free their thread state data
|
---|
468 | structure.
|
---|
469 |
|
---|
470 | Beginning with version 2.3, threads can now take advantage of the
|
---|
471 | \cfunction{PyGILState_*()} functions to do all of the above
|
---|
472 | automatically. The typical idiom for calling into Python from a C
|
---|
473 | thread is now:
|
---|
474 |
|
---|
475 | \begin{verbatim}
|
---|
476 | PyGILState_STATE gstate;
|
---|
477 | gstate = PyGILState_Ensure();
|
---|
478 |
|
---|
479 | /* Perform Python actions here. */
|
---|
480 | result = CallSomeFunction();
|
---|
481 | /* evaluate result */
|
---|
482 |
|
---|
483 | /* Release the thread. No Python API allowed beyond this point. */
|
---|
484 | PyGILState_Release(gstate);
|
---|
485 | \end{verbatim}
|
---|
486 |
|
---|
487 | Note that the \cfunction{PyGILState_*()} functions assume there is
|
---|
488 | only one global interpreter (created automatically by
|
---|
489 | \cfunction{Py_Initialize()}). Python still supports the creation of
|
---|
490 | additional interpreters (using \cfunction{Py_NewInterpreter()}), but
|
---|
491 | mixing multiple interpreters and the \cfunction{PyGILState_*()} API is
|
---|
492 | unsupported.
|
---|
493 |
|
---|
494 | \begin{ctypedesc}{PyInterpreterState}
|
---|
495 | This data structure represents the state shared by a number of
|
---|
496 | cooperating threads. Threads belonging to the same interpreter
|
---|
497 | share their module administration and a few other internal items.
|
---|
498 | There are no public members in this structure.
|
---|
499 |
|
---|
500 | Threads belonging to different interpreters initially share nothing,
|
---|
501 | except process state like available memory, open file descriptors
|
---|
502 | and such. The global interpreter lock is also shared by all
|
---|
503 | threads, regardless of to which interpreter they belong.
|
---|
504 | \end{ctypedesc}
|
---|
505 |
|
---|
506 | \begin{ctypedesc}{PyThreadState}
|
---|
507 | This data structure represents the state of a single thread. The
|
---|
508 | only public data member is \ctype{PyInterpreterState
|
---|
509 | *}\member{interp}, which points to this thread's interpreter state.
|
---|
510 | \end{ctypedesc}
|
---|
511 |
|
---|
512 | \begin{cfuncdesc}{void}{PyEval_InitThreads}{}
|
---|
513 | Initialize and acquire the global interpreter lock. It should be
|
---|
514 | called in the main thread before creating a second thread or
|
---|
515 | engaging in any other thread operations such as
|
---|
516 | \cfunction{PyEval_ReleaseLock()}\ttindex{PyEval_ReleaseLock()} or
|
---|
517 | \code{PyEval_ReleaseThread(\var{tstate})}\ttindex{PyEval_ReleaseThread()}.
|
---|
518 | It is not needed before calling
|
---|
519 | \cfunction{PyEval_SaveThread()}\ttindex{PyEval_SaveThread()} or
|
---|
520 | \cfunction{PyEval_RestoreThread()}\ttindex{PyEval_RestoreThread()}.
|
---|
521 |
|
---|
522 | This is a no-op when called for a second time. It is safe to call
|
---|
523 | this function before calling
|
---|
524 | \cfunction{Py_Initialize()}\ttindex{Py_Initialize()}.
|
---|
525 |
|
---|
526 | When only the main thread exists, no lock operations are needed.
|
---|
527 | This is a common situation (most Python programs do not use
|
---|
528 | threads), and the lock operations slow the interpreter down a bit.
|
---|
529 | Therefore, the lock is not created initially. This situation is
|
---|
530 | equivalent to having acquired the lock: when there is only a single
|
---|
531 | thread, all object accesses are safe. Therefore, when this function
|
---|
532 | initializes the lock, it also acquires it. Before the Python
|
---|
533 | \module{thread}\refbimodindex{thread} module creates a new thread,
|
---|
534 | knowing that either it has the lock or the lock hasn't been created
|
---|
535 | yet, it calls \cfunction{PyEval_InitThreads()}. When this call
|
---|
536 | returns, it is guaranteed that the lock has been created and that the
|
---|
537 | calling thread has acquired it.
|
---|
538 |
|
---|
539 | It is \strong{not} safe to call this function when it is unknown
|
---|
540 | which thread (if any) currently has the global interpreter lock.
|
---|
541 |
|
---|
542 | This function is not available when thread support is disabled at
|
---|
543 | compile time.
|
---|
544 | \end{cfuncdesc}
|
---|
545 |
|
---|
546 | \begin{cfuncdesc}{int}{PyEval_ThreadsInitialized}{}
|
---|
547 | Returns a non-zero value if \cfunction{PyEval_InitThreads()} has been
|
---|
548 | called. This function can be called without holding the lock, and
|
---|
549 | therefore can be used to avoid calls to the locking API when running
|
---|
550 | single-threaded. This function is not available when thread support
|
---|
551 | is disabled at compile time. \versionadded{2.4}
|
---|
552 | \end{cfuncdesc}
|
---|
553 |
|
---|
554 | \begin{cfuncdesc}{void}{PyEval_AcquireLock}{}
|
---|
555 | Acquire the global interpreter lock. The lock must have been
|
---|
556 | created earlier. If this thread already has the lock, a deadlock
|
---|
557 | ensues. This function is not available when thread support is
|
---|
558 | disabled at compile time.
|
---|
559 | \end{cfuncdesc}
|
---|
560 |
|
---|
561 | \begin{cfuncdesc}{void}{PyEval_ReleaseLock}{}
|
---|
562 | Release the global interpreter lock. The lock must have been
|
---|
563 | created earlier. This function is not available when thread support
|
---|
564 | is disabled at compile time.
|
---|
565 | \end{cfuncdesc}
|
---|
566 |
|
---|
567 | \begin{cfuncdesc}{void}{PyEval_AcquireThread}{PyThreadState *tstate}
|
---|
568 | Acquire the global interpreter lock and set the current thread
|
---|
569 | state to \var{tstate}, which should not be \NULL. The lock must
|
---|
570 | have been created earlier. If this thread already has the lock,
|
---|
571 | deadlock ensues. This function is not available when thread support
|
---|
572 | is disabled at compile time.
|
---|
573 | \end{cfuncdesc}
|
---|
574 |
|
---|
575 | \begin{cfuncdesc}{void}{PyEval_ReleaseThread}{PyThreadState *tstate}
|
---|
576 | Reset the current thread state to \NULL{} and release the global
|
---|
577 | interpreter lock. The lock must have been created earlier and must
|
---|
578 | be held by the current thread. The \var{tstate} argument, which
|
---|
579 | must not be \NULL, is only used to check that it represents the
|
---|
580 | current thread state --- if it isn't, a fatal error is reported.
|
---|
581 | This function is not available when thread support is disabled at
|
---|
582 | compile time.
|
---|
583 | \end{cfuncdesc}
|
---|
584 |
|
---|
585 | \begin{cfuncdesc}{PyThreadState*}{PyEval_SaveThread}{}
|
---|
586 | Release the interpreter lock (if it has been created and thread
|
---|
587 | support is enabled) and reset the thread state to \NULL, returning
|
---|
588 | the previous thread state (which is not \NULL). If the lock has
|
---|
589 | been created, the current thread must have acquired it. (This
|
---|
590 | function is available even when thread support is disabled at
|
---|
591 | compile time.)
|
---|
592 | \end{cfuncdesc}
|
---|
593 |
|
---|
594 | \begin{cfuncdesc}{void}{PyEval_RestoreThread}{PyThreadState *tstate}
|
---|
595 | Acquire the interpreter lock (if it has been created and thread
|
---|
596 | support is enabled) and set the thread state to \var{tstate}, which
|
---|
597 | must not be \NULL. If the lock has been created, the current thread
|
---|
598 | must not have acquired it, otherwise deadlock ensues. (This
|
---|
599 | function is available even when thread support is disabled at
|
---|
600 | compile time.)
|
---|
601 | \end{cfuncdesc}
|
---|
602 |
|
---|
603 | The following macros are normally used without a trailing semicolon;
|
---|
604 | look for example usage in the Python source distribution.
|
---|
605 |
|
---|
606 | \begin{csimplemacrodesc}{Py_BEGIN_ALLOW_THREADS}
|
---|
607 | This macro expands to
|
---|
608 | \samp{\{ PyThreadState *_save; _save = PyEval_SaveThread();}.
|
---|
609 | Note that it contains an opening brace; it must be matched with a
|
---|
610 | following \csimplemacro{Py_END_ALLOW_THREADS} macro. See above for
|
---|
611 | further discussion of this macro. It is a no-op when thread support
|
---|
612 | is disabled at compile time.
|
---|
613 | \end{csimplemacrodesc}
|
---|
614 |
|
---|
615 | \begin{csimplemacrodesc}{Py_END_ALLOW_THREADS}
|
---|
616 | This macro expands to \samp{PyEval_RestoreThread(_save); \}}.
|
---|
617 | Note that it contains a closing brace; it must be matched with an
|
---|
618 | earlier \csimplemacro{Py_BEGIN_ALLOW_THREADS} macro. See above for
|
---|
619 | further discussion of this macro. It is a no-op when thread support
|
---|
620 | is disabled at compile time.
|
---|
621 | \end{csimplemacrodesc}
|
---|
622 |
|
---|
623 | \begin{csimplemacrodesc}{Py_BLOCK_THREADS}
|
---|
624 | This macro expands to \samp{PyEval_RestoreThread(_save);}: it is
|
---|
625 | equivalent to \csimplemacro{Py_END_ALLOW_THREADS} without the
|
---|
626 | closing brace. It is a no-op when thread support is disabled at
|
---|
627 | compile time.
|
---|
628 | \end{csimplemacrodesc}
|
---|
629 |
|
---|
630 | \begin{csimplemacrodesc}{Py_UNBLOCK_THREADS}
|
---|
631 | This macro expands to \samp{_save = PyEval_SaveThread();}: it is
|
---|
632 | equivalent to \csimplemacro{Py_BEGIN_ALLOW_THREADS} without the
|
---|
633 | opening brace and variable declaration. It is a no-op when thread
|
---|
634 | support is disabled at compile time.
|
---|
635 | \end{csimplemacrodesc}
|
---|
636 |
|
---|
637 | All of the following functions are only available when thread support
|
---|
638 | is enabled at compile time, and must be called only when the
|
---|
639 | interpreter lock has been created.
|
---|
640 |
|
---|
641 | \begin{cfuncdesc}{PyInterpreterState*}{PyInterpreterState_New}{}
|
---|
642 | Create a new interpreter state object. The interpreter lock need
|
---|
643 | not be held, but may be held if it is necessary to serialize calls
|
---|
644 | to this function.
|
---|
645 | \end{cfuncdesc}
|
---|
646 |
|
---|
647 | \begin{cfuncdesc}{void}{PyInterpreterState_Clear}{PyInterpreterState *interp}
|
---|
648 | Reset all information in an interpreter state object. The
|
---|
649 | interpreter lock must be held.
|
---|
650 | \end{cfuncdesc}
|
---|
651 |
|
---|
652 | \begin{cfuncdesc}{void}{PyInterpreterState_Delete}{PyInterpreterState *interp}
|
---|
653 | Destroy an interpreter state object. The interpreter lock need not
|
---|
654 | be held. The interpreter state must have been reset with a previous
|
---|
655 | call to \cfunction{PyInterpreterState_Clear()}.
|
---|
656 | \end{cfuncdesc}
|
---|
657 |
|
---|
658 | \begin{cfuncdesc}{PyThreadState*}{PyThreadState_New}{PyInterpreterState *interp}
|
---|
659 | Create a new thread state object belonging to the given interpreter
|
---|
660 | object. The interpreter lock need not be held, but may be held if
|
---|
661 | it is necessary to serialize calls to this function.
|
---|
662 | \end{cfuncdesc}
|
---|
663 |
|
---|
664 | \begin{cfuncdesc}{void}{PyThreadState_Clear}{PyThreadState *tstate}
|
---|
665 | Reset all information in a thread state object. The interpreter lock
|
---|
666 | must be held.
|
---|
667 | \end{cfuncdesc}
|
---|
668 |
|
---|
669 | \begin{cfuncdesc}{void}{PyThreadState_Delete}{PyThreadState *tstate}
|
---|
670 | Destroy a thread state object. The interpreter lock need not be
|
---|
671 | held. The thread state must have been reset with a previous call to
|
---|
672 | \cfunction{PyThreadState_Clear()}.
|
---|
673 | \end{cfuncdesc}
|
---|
674 |
|
---|
675 | \begin{cfuncdesc}{PyThreadState*}{PyThreadState_Get}{}
|
---|
676 | Return the current thread state. The interpreter lock must be
|
---|
677 | held. When the current thread state is \NULL, this issues a fatal
|
---|
678 | error (so that the caller needn't check for \NULL).
|
---|
679 | \end{cfuncdesc}
|
---|
680 |
|
---|
681 | \begin{cfuncdesc}{PyThreadState*}{PyThreadState_Swap}{PyThreadState *tstate}
|
---|
682 | Swap the current thread state with the thread state given by the
|
---|
683 | argument \var{tstate}, which may be \NULL. The interpreter lock
|
---|
684 | must be held.
|
---|
685 | \end{cfuncdesc}
|
---|
686 |
|
---|
687 | \begin{cfuncdesc}{PyObject*}{PyThreadState_GetDict}{}
|
---|
688 | Return a dictionary in which extensions can store thread-specific
|
---|
689 | state information. Each extension should use a unique key to use to
|
---|
690 | store state in the dictionary. It is okay to call this function
|
---|
691 | when no current thread state is available.
|
---|
692 | If this function returns \NULL, no exception has been raised and the
|
---|
693 | caller should assume no current thread state is available.
|
---|
694 | \versionchanged[Previously this could only be called when a current
|
---|
695 | thread is active, and \NULL{} meant that an exception was raised]{2.3}
|
---|
696 | \end{cfuncdesc}
|
---|
697 |
|
---|
698 | \begin{cfuncdesc}{int}{PyThreadState_SetAsyncExc}{long id, PyObject *exc}
|
---|
699 | Asynchronously raise an exception in a thread.
|
---|
700 | The \var{id} argument is the thread id of the target thread;
|
---|
701 | \var{exc} is the exception object to be raised.
|
---|
702 | This function does not steal any references to \var{exc}.
|
---|
703 | To prevent naive misuse, you must write your own C extension
|
---|
704 | to call this. Must be called with the GIL held.
|
---|
705 | Returns the number of thread states modified; this is normally one, but
|
---|
706 | will be zero if the thread id isn't found. If \var{exc} is
|
---|
707 | \constant{NULL}, the pending exception (if any) for the thread is cleared.
|
---|
708 | This raises no exceptions.
|
---|
709 | \versionadded{2.3}
|
---|
710 | \end{cfuncdesc}
|
---|
711 |
|
---|
712 | \begin{cfuncdesc}{PyGILState_STATE}{PyGILState_Ensure}{}
|
---|
713 | Ensure that the current thread is ready to call the Python C API
|
---|
714 | regardless of the current state of Python, or of its thread lock.
|
---|
715 | This may be called as many times as desired by a thread as long as
|
---|
716 | each call is matched with a call to \cfunction{PyGILState_Release()}.
|
---|
717 | In general, other thread-related APIs may be used between
|
---|
718 | \cfunction{PyGILState_Ensure()} and \cfunction{PyGILState_Release()}
|
---|
719 | calls as long as the thread state is restored to its previous state
|
---|
720 | before the Release(). For example, normal usage of the
|
---|
721 | \csimplemacro{Py_BEGIN_ALLOW_THREADS} and
|
---|
722 | \csimplemacro{Py_END_ALLOW_THREADS} macros is acceptable.
|
---|
723 |
|
---|
724 | The return value is an opaque "handle" to the thread state when
|
---|
725 | \cfunction{PyGILState_Acquire()} was called, and must be passed to
|
---|
726 | \cfunction{PyGILState_Release()} to ensure Python is left in the same
|
---|
727 | state. Even though recursive calls are allowed, these handles
|
---|
728 | \emph{cannot} be shared - each unique call to
|
---|
729 | \cfunction{PyGILState_Ensure} must save the handle for its call to
|
---|
730 | \cfunction{PyGILState_Release}.
|
---|
731 |
|
---|
732 | When the function returns, the current thread will hold the GIL.
|
---|
733 | Failure is a fatal error.
|
---|
734 | \versionadded{2.3}
|
---|
735 | \end{cfuncdesc}
|
---|
736 |
|
---|
737 | \begin{cfuncdesc}{void}{PyGILState_Release}{PyGILState_STATE}
|
---|
738 | Release any resources previously acquired. After this call, Python's
|
---|
739 | state will be the same as it was prior to the corresponding
|
---|
740 | \cfunction{PyGILState_Ensure} call (but generally this state will be
|
---|
741 | unknown to the caller, hence the use of the GILState API.)
|
---|
742 |
|
---|
743 | Every call to \cfunction{PyGILState_Ensure()} must be matched by a call to
|
---|
744 | \cfunction{PyGILState_Release()} on the same thread.
|
---|
745 | \versionadded{2.3}
|
---|
746 | \end{cfuncdesc}
|
---|
747 |
|
---|
748 |
|
---|
749 | \section{Profiling and Tracing \label{profiling}}
|
---|
750 |
|
---|
751 | \sectionauthor{Fred L. Drake, Jr.}{fdrake@acm.org}
|
---|
752 |
|
---|
753 | The Python interpreter provides some low-level support for attaching
|
---|
754 | profiling and execution tracing facilities. These are used for
|
---|
755 | profiling, debugging, and coverage analysis tools.
|
---|
756 |
|
---|
757 | Starting with Python 2.2, the implementation of this facility was
|
---|
758 | substantially revised, and an interface from C was added. This C
|
---|
759 | interface allows the profiling or tracing code to avoid the overhead
|
---|
760 | of calling through Python-level callable objects, making a direct C
|
---|
761 | function call instead. The essential attributes of the facility have
|
---|
762 | not changed; the interface allows trace functions to be installed
|
---|
763 | per-thread, and the basic events reported to the trace function are
|
---|
764 | the same as had been reported to the Python-level trace functions in
|
---|
765 | previous versions.
|
---|
766 |
|
---|
767 | \begin{ctypedesc}[Py_tracefunc]{int (*Py_tracefunc)(PyObject *obj,
|
---|
768 | PyFrameObject *frame, int what,
|
---|
769 | PyObject *arg)}
|
---|
770 | The type of the trace function registered using
|
---|
771 | \cfunction{PyEval_SetProfile()} and \cfunction{PyEval_SetTrace()}.
|
---|
772 | The first parameter is the object passed to the registration
|
---|
773 | function as \var{obj}, \var{frame} is the frame object to which the
|
---|
774 | event pertains, \var{what} is one of the constants
|
---|
775 | \constant{PyTrace_CALL}, \constant{PyTrace_EXCEPTION},
|
---|
776 | \constant{PyTrace_LINE}, \constant{PyTrace_RETURN},
|
---|
777 | \constant{PyTrace_C_CALL}, \constant{PyTrace_C_EXCEPTION},
|
---|
778 | or \constant{PyTrace_C_RETURN}, and \var{arg}
|
---|
779 | depends on the value of \var{what}:
|
---|
780 |
|
---|
781 | \begin{tableii}{l|l}{constant}{Value of \var{what}}{Meaning of \var{arg}}
|
---|
782 | \lineii{PyTrace_CALL}{Always \NULL.}
|
---|
783 | \lineii{PyTrace_EXCEPTION}{Exception information as returned by
|
---|
784 | \function{sys.exc_info()}.}
|
---|
785 | \lineii{PyTrace_LINE}{Always \NULL.}
|
---|
786 | \lineii{PyTrace_RETURN}{Value being returned to the caller.}
|
---|
787 | \lineii{PyTrace_C_CALL}{Name of function being called.}
|
---|
788 | \lineii{PyTrace_C_EXCEPTION}{Always \NULL.}
|
---|
789 | \lineii{PyTrace_C_RETURN}{Always \NULL.}
|
---|
790 | \end{tableii}
|
---|
791 | \end{ctypedesc}
|
---|
792 |
|
---|
793 | \begin{cvardesc}{int}{PyTrace_CALL}
|
---|
794 | The value of the \var{what} parameter to a \ctype{Py_tracefunc}
|
---|
795 | function when a new call to a function or method is being reported,
|
---|
796 | or a new entry into a generator. Note that the creation of the
|
---|
797 | iterator for a generator function is not reported as there is no
|
---|
798 | control transfer to the Python bytecode in the corresponding frame.
|
---|
799 | \end{cvardesc}
|
---|
800 |
|
---|
801 | \begin{cvardesc}{int}{PyTrace_EXCEPTION}
|
---|
802 | The value of the \var{what} parameter to a \ctype{Py_tracefunc}
|
---|
803 | function when an exception has been raised. The callback function
|
---|
804 | is called with this value for \var{what} when after any bytecode is
|
---|
805 | processed after which the exception becomes set within the frame
|
---|
806 | being executed. The effect of this is that as exception propagation
|
---|
807 | causes the Python stack to unwind, the callback is called upon
|
---|
808 | return to each frame as the exception propagates. Only trace
|
---|
809 | functions receives these events; they are not needed by the
|
---|
810 | profiler.
|
---|
811 | \end{cvardesc}
|
---|
812 |
|
---|
813 | \begin{cvardesc}{int}{PyTrace_LINE}
|
---|
814 | The value passed as the \var{what} parameter to a trace function
|
---|
815 | (but not a profiling function) when a line-number event is being
|
---|
816 | reported.
|
---|
817 | \end{cvardesc}
|
---|
818 |
|
---|
819 | \begin{cvardesc}{int}{PyTrace_RETURN}
|
---|
820 | The value for the \var{what} parameter to \ctype{Py_tracefunc}
|
---|
821 | functions when a call is returning without propagating an exception.
|
---|
822 | \end{cvardesc}
|
---|
823 |
|
---|
824 | \begin{cvardesc}{int}{PyTrace_C_CALL}
|
---|
825 | The value for the \var{what} parameter to \ctype{Py_tracefunc}
|
---|
826 | functions when a C function is about to be called.
|
---|
827 | \end{cvardesc}
|
---|
828 |
|
---|
829 | \begin{cvardesc}{int}{PyTrace_C_EXCEPTION}
|
---|
830 | The value for the \var{what} parameter to \ctype{Py_tracefunc}
|
---|
831 | functions when a C function has thrown an exception.
|
---|
832 | \end{cvardesc}
|
---|
833 |
|
---|
834 | \begin{cvardesc}{int}{PyTrace_C_RETURN}
|
---|
835 | The value for the \var{what} parameter to \ctype{Py_tracefunc}
|
---|
836 | functions when a C function has returned.
|
---|
837 | \end{cvardesc}
|
---|
838 |
|
---|
839 | \begin{cfuncdesc}{void}{PyEval_SetProfile}{Py_tracefunc func, PyObject *obj}
|
---|
840 | Set the profiler function to \var{func}. The \var{obj} parameter is
|
---|
841 | passed to the function as its first parameter, and may be any Python
|
---|
842 | object, or \NULL. If the profile function needs to maintain state,
|
---|
843 | using a different value for \var{obj} for each thread provides a
|
---|
844 | convenient and thread-safe place to store it. The profile function
|
---|
845 | is called for all monitored events except the line-number events.
|
---|
846 | \end{cfuncdesc}
|
---|
847 |
|
---|
848 | \begin{cfuncdesc}{void}{PyEval_SetTrace}{Py_tracefunc func, PyObject *obj}
|
---|
849 | Set the tracing function to \var{func}. This is similar to
|
---|
850 | \cfunction{PyEval_SetProfile()}, except the tracing function does
|
---|
851 | receive line-number events.
|
---|
852 | \end{cfuncdesc}
|
---|
853 |
|
---|
854 |
|
---|
855 | \section{Advanced Debugger Support \label{advanced-debugging}}
|
---|
856 | \sectionauthor{Fred L. Drake, Jr.}{fdrake@acm.org}
|
---|
857 |
|
---|
858 | These functions are only intended to be used by advanced debugging
|
---|
859 | tools.
|
---|
860 |
|
---|
861 | \begin{cfuncdesc}{PyInterpreterState*}{PyInterpreterState_Head}{}
|
---|
862 | Return the interpreter state object at the head of the list of all
|
---|
863 | such objects.
|
---|
864 | \versionadded{2.2}
|
---|
865 | \end{cfuncdesc}
|
---|
866 |
|
---|
867 | \begin{cfuncdesc}{PyInterpreterState*}{PyInterpreterState_Next}{PyInterpreterState *interp}
|
---|
868 | Return the next interpreter state object after \var{interp} from the
|
---|
869 | list of all such objects.
|
---|
870 | \versionadded{2.2}
|
---|
871 | \end{cfuncdesc}
|
---|
872 |
|
---|
873 | \begin{cfuncdesc}{PyThreadState *}{PyInterpreterState_ThreadHead}{PyInterpreterState *interp}
|
---|
874 | Return the a pointer to the first \ctype{PyThreadState} object in
|
---|
875 | the list of threads associated with the interpreter \var{interp}.
|
---|
876 | \versionadded{2.2}
|
---|
877 | \end{cfuncdesc}
|
---|
878 |
|
---|
879 | \begin{cfuncdesc}{PyThreadState*}{PyThreadState_Next}{PyThreadState *tstate}
|
---|
880 | Return the next thread state object after \var{tstate} from the list
|
---|
881 | of all such objects belonging to the same \ctype{PyInterpreterState}
|
---|
882 | object.
|
---|
883 | \versionadded{2.2}
|
---|
884 | \end{cfuncdesc}
|
---|