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