| 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 |  | 
| Martin v. Löwis | 336e85f | 2004-08-19 11:31:58 +0000 | [diff] [blame] | 26 | \begin{cfuncdesc}{void}{Py_InitializeEx}{int initsigs} | 
| Tim Peters | 7f468f2 | 2004-10-11 02:40:51 +0000 | [diff] [blame^] | 27 | This function works like \cfunction{Py_Initialize()} if | 
| Martin v. Löwis | 336e85f | 2004-08-19 11:31:58 +0000 | [diff] [blame] | 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 |  | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 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 | 
| Michael W. Hudson | bbe17f5 | 2003-02-10 19:12:42 +0000 | [diff] [blame] | 68 | modules may not be freed.  Some extensions may not work properly if | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 69 | their initialization routine is called more than once; this can | 
| Michael W. Hudson | bbe17f5 | 2003-02-10 19:12:42 +0000 | [diff] [blame] | 70 | happen if an application calls \cfunction{Py_Initialize()} and | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 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 | 
| Brett Cannon | 65d6342 | 2004-03-18 01:38:11 +0000 | [diff] [blame] | 92 | sub-interpreter.  This thread state is made in the current thread | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 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 | \end{cfuncdesc} | 
|  | 135 |  | 
|  | 136 | \begin{cfuncdesc}{void}{Py_EndInterpreter}{PyThreadState *tstate} | 
|  | 137 | Destroy the (sub-)interpreter represented by the given thread state. | 
|  | 138 | The given thread state must be the current thread state.  See the | 
|  | 139 | discussion of thread states below.  When the call returns, the | 
|  | 140 | current thread state is \NULL.  All thread states associated with | 
| Brett Cannon | 9b976e6 | 2004-03-18 00:49:01 +0000 | [diff] [blame] | 141 | this interpreter are destroyed.  (The global interpreter lock must | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 142 | be held before calling this function and is still held when it | 
|  | 143 | returns.)  \cfunction{Py_Finalize()}\ttindex{Py_Finalize()} will | 
|  | 144 | destroy all sub-interpreters that haven't been explicitly destroyed | 
|  | 145 | at that point. | 
|  | 146 | \end{cfuncdesc} | 
|  | 147 |  | 
|  | 148 | \begin{cfuncdesc}{void}{Py_SetProgramName}{char *name} | 
|  | 149 | This function should be called before | 
|  | 150 | \cfunction{Py_Initialize()}\ttindex{Py_Initialize()} is called | 
|  | 151 | for the first time, if it is called at all.  It tells the | 
|  | 152 | interpreter the value of the \code{argv[0]} argument to the | 
|  | 153 | \cfunction{main()}\ttindex{main()} function of the program.  This is | 
|  | 154 | used by \cfunction{Py_GetPath()}\ttindex{Py_GetPath()} and some | 
|  | 155 | other functions below to find the Python run-time libraries relative | 
|  | 156 | to the interpreter executable.  The default value is | 
|  | 157 | \code{'python'}.  The argument should point to a zero-terminated | 
|  | 158 | character string in static storage whose contents will not change | 
|  | 159 | for the duration of the program's execution.  No code in the Python | 
|  | 160 | interpreter will change the contents of this storage. | 
|  | 161 | \end{cfuncdesc} | 
|  | 162 |  | 
|  | 163 | \begin{cfuncdesc}{char*}{Py_GetProgramName}{} | 
|  | 164 | Return the program name set with | 
|  | 165 | \cfunction{Py_SetProgramName()}\ttindex{Py_SetProgramName()}, or the | 
|  | 166 | default.  The returned string points into static storage; the caller | 
|  | 167 | should not modify its value. | 
|  | 168 | \end{cfuncdesc} | 
|  | 169 |  | 
|  | 170 | \begin{cfuncdesc}{char*}{Py_GetPrefix}{} | 
|  | 171 | Return the \emph{prefix} for installed platform-independent files. | 
|  | 172 | This is derived through a number of complicated rules from the | 
|  | 173 | program name set with \cfunction{Py_SetProgramName()} and some | 
|  | 174 | environment variables; for example, if the program name is | 
|  | 175 | \code{'/usr/local/bin/python'}, the prefix is \code{'/usr/local'}. | 
|  | 176 | The returned string points into static storage; the caller should | 
|  | 177 | not modify its value.  This corresponds to the \makevar{prefix} | 
|  | 178 | variable in the top-level \file{Makefile} and the | 
|  | 179 | \longprogramopt{prefix} argument to the \program{configure} script | 
|  | 180 | at build time.  The value is available to Python code as | 
|  | 181 | \code{sys.prefix}.  It is only useful on \UNIX.  See also the next | 
|  | 182 | function. | 
|  | 183 | \end{cfuncdesc} | 
|  | 184 |  | 
|  | 185 | \begin{cfuncdesc}{char*}{Py_GetExecPrefix}{} | 
|  | 186 | Return the \emph{exec-prefix} for installed | 
|  | 187 | platform-\emph{de}pendent files.  This is derived through a number | 
|  | 188 | of complicated rules from the program name set with | 
|  | 189 | \cfunction{Py_SetProgramName()} and some environment variables; for | 
|  | 190 | example, if the program name is \code{'/usr/local/bin/python'}, the | 
|  | 191 | exec-prefix is \code{'/usr/local'}.  The returned string points into | 
|  | 192 | static storage; the caller should not modify its value.  This | 
|  | 193 | corresponds to the \makevar{exec_prefix} variable in the top-level | 
|  | 194 | \file{Makefile} and the \longprogramopt{exec-prefix} argument to the | 
|  | 195 | \program{configure} script at build  time.  The value is available | 
|  | 196 | to Python code as \code{sys.exec_prefix}.  It is only useful on | 
|  | 197 | \UNIX. | 
|  | 198 |  | 
|  | 199 | Background: The exec-prefix differs from the prefix when platform | 
|  | 200 | dependent files (such as executables and shared libraries) are | 
|  | 201 | installed in a different directory tree.  In a typical installation, | 
|  | 202 | platform dependent files may be installed in the | 
|  | 203 | \file{/usr/local/plat} subtree while platform independent may be | 
|  | 204 | installed in \file{/usr/local}. | 
|  | 205 |  | 
|  | 206 | Generally speaking, a platform is a combination of hardware and | 
|  | 207 | software families, e.g.  Sparc machines running the Solaris 2.x | 
|  | 208 | operating system are considered the same platform, but Intel | 
|  | 209 | machines running Solaris 2.x are another platform, and Intel | 
|  | 210 | machines running Linux are yet another platform.  Different major | 
|  | 211 | revisions of the same operating system generally also form different | 
|  | 212 | platforms.  Non-\UNIX{} operating systems are a different story; the | 
|  | 213 | installation strategies on those systems are so different that the | 
|  | 214 | prefix and exec-prefix are meaningless, and set to the empty string. | 
|  | 215 | Note that compiled Python bytecode files are platform independent | 
|  | 216 | (but not independent from the Python version by which they were | 
|  | 217 | compiled!). | 
|  | 218 |  | 
|  | 219 | System administrators will know how to configure the \program{mount} | 
|  | 220 | or \program{automount} programs to share \file{/usr/local} between | 
|  | 221 | platforms while having \file{/usr/local/plat} be a different | 
|  | 222 | filesystem for each platform. | 
|  | 223 | \end{cfuncdesc} | 
|  | 224 |  | 
|  | 225 | \begin{cfuncdesc}{char*}{Py_GetProgramFullPath}{} | 
|  | 226 | Return the full program name of the Python executable; this is | 
|  | 227 | computed as a side-effect of deriving the default module search path | 
|  | 228 | from the program name (set by | 
|  | 229 | \cfunction{Py_SetProgramName()}\ttindex{Py_SetProgramName()} above). | 
|  | 230 | The returned string points into static storage; the caller should | 
|  | 231 | not modify its value.  The value is available to Python code as | 
|  | 232 | \code{sys.executable}. | 
|  | 233 | \withsubitem{(in module sys)}{\ttindex{executable}} | 
|  | 234 | \end{cfuncdesc} | 
|  | 235 |  | 
|  | 236 | \begin{cfuncdesc}{char*}{Py_GetPath}{} | 
|  | 237 | \indexiii{module}{search}{path} | 
|  | 238 | Return the default module search path; this is computed from the | 
|  | 239 | program name (set by \cfunction{Py_SetProgramName()} above) and some | 
|  | 240 | environment variables.  The returned string consists of a series of | 
|  | 241 | directory names separated by a platform dependent delimiter | 
|  | 242 | character.  The delimiter character is \character{:} on \UNIX, | 
| Martin v. Löwis | 36a4d8c | 2002-10-10 18:24:54 +0000 | [diff] [blame] | 243 | \character{;} on Windows, and \character{\e n} (the \ASCII{} | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 244 | newline character) on Macintosh.  The returned string points into | 
|  | 245 | static storage; the caller should not modify its value.  The value | 
|  | 246 | is available to Python code as the list | 
|  | 247 | \code{sys.path}\withsubitem{(in module sys)}{\ttindex{path}}, which | 
|  | 248 | may be modified to change the future search path for loaded | 
|  | 249 | modules. | 
|  | 250 |  | 
|  | 251 | % XXX should give the exact rules | 
|  | 252 | \end{cfuncdesc} | 
|  | 253 |  | 
|  | 254 | \begin{cfuncdesc}{const char*}{Py_GetVersion}{} | 
|  | 255 | Return the version of this Python interpreter.  This is a string | 
|  | 256 | that looks something like | 
|  | 257 |  | 
|  | 258 | \begin{verbatim} | 
|  | 259 | "1.5 (#67, Dec 31 1997, 22:34:28) [GCC 2.7.2.2]" | 
|  | 260 | \end{verbatim} | 
|  | 261 |  | 
|  | 262 | The first word (up to the first space character) is the current | 
|  | 263 | Python version; the first three characters are the major and minor | 
|  | 264 | version separated by a period.  The returned string points into | 
|  | 265 | static storage; the caller should not modify its value.  The value | 
| Michael W. Hudson | bbe17f5 | 2003-02-10 19:12:42 +0000 | [diff] [blame] | 266 | is available to Python code as \code{sys.version}. | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 267 | \withsubitem{(in module sys)}{\ttindex{version}} | 
|  | 268 | \end{cfuncdesc} | 
|  | 269 |  | 
|  | 270 | \begin{cfuncdesc}{const char*}{Py_GetPlatform}{} | 
|  | 271 | Return the platform identifier for the current platform.  On \UNIX, | 
|  | 272 | this is formed from the ``official'' name of the operating system, | 
|  | 273 | converted to lower case, followed by the major revision number; | 
|  | 274 | e.g., for Solaris 2.x, which is also known as SunOS 5.x, the value | 
|  | 275 | is \code{'sunos5'}.  On Macintosh, it is \code{'mac'}.  On Windows, | 
|  | 276 | it is \code{'win'}.  The returned string points into static storage; | 
|  | 277 | the caller should not modify its value.  The value is available to | 
|  | 278 | Python code as \code{sys.platform}. | 
|  | 279 | \withsubitem{(in module sys)}{\ttindex{platform}} | 
|  | 280 | \end{cfuncdesc} | 
|  | 281 |  | 
|  | 282 | \begin{cfuncdesc}{const char*}{Py_GetCopyright}{} | 
|  | 283 | Return the official copyright string for the current Python version, | 
|  | 284 | for example | 
|  | 285 |  | 
|  | 286 | \code{'Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam'} | 
|  | 287 |  | 
|  | 288 | The returned string points into static storage; the caller should | 
| Michael W. Hudson | bbe17f5 | 2003-02-10 19:12:42 +0000 | [diff] [blame] | 289 | not modify its value.  The value is available to Python code as | 
|  | 290 | \code{sys.copyright}. | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 291 | \withsubitem{(in module sys)}{\ttindex{copyright}} | 
|  | 292 | \end{cfuncdesc} | 
|  | 293 |  | 
|  | 294 | \begin{cfuncdesc}{const char*}{Py_GetCompiler}{} | 
|  | 295 | Return an indication of the compiler used to build the current | 
|  | 296 | Python version, in square brackets, for example: | 
|  | 297 |  | 
|  | 298 | \begin{verbatim} | 
|  | 299 | "[GCC 2.7.2.2]" | 
|  | 300 | \end{verbatim} | 
|  | 301 |  | 
|  | 302 | The returned string points into static storage; the caller should | 
|  | 303 | not modify its value.  The value is available to Python code as part | 
|  | 304 | of the variable \code{sys.version}. | 
|  | 305 | \withsubitem{(in module sys)}{\ttindex{version}} | 
|  | 306 | \end{cfuncdesc} | 
|  | 307 |  | 
|  | 308 | \begin{cfuncdesc}{const char*}{Py_GetBuildInfo}{} | 
|  | 309 | Return information about the sequence number and build date and time | 
|  | 310 | of the current Python interpreter instance, for example | 
|  | 311 |  | 
|  | 312 | \begin{verbatim} | 
|  | 313 | "#67, Aug  1 1997, 22:34:28" | 
|  | 314 | \end{verbatim} | 
|  | 315 |  | 
|  | 316 | The returned string points into static storage; the caller should | 
|  | 317 | not modify its value.  The value is available to Python code as part | 
|  | 318 | of the variable \code{sys.version}. | 
|  | 319 | \withsubitem{(in module sys)}{\ttindex{version}} | 
|  | 320 | \end{cfuncdesc} | 
|  | 321 |  | 
|  | 322 | \begin{cfuncdesc}{int}{PySys_SetArgv}{int argc, char **argv} | 
|  | 323 | Set \code{sys.argv} based on \var{argc} and \var{argv}.  These | 
|  | 324 | parameters are similar to those passed to the program's | 
|  | 325 | \cfunction{main()}\ttindex{main()} function with the difference that | 
|  | 326 | the first entry should refer to the script file to be executed | 
|  | 327 | rather than the executable hosting the Python interpreter.  If there | 
|  | 328 | isn't a script that will be run, the first entry in \var{argv} can | 
|  | 329 | be an empty string.  If this function fails to initialize | 
|  | 330 | \code{sys.argv}, a fatal condition is signalled using | 
|  | 331 | \cfunction{Py_FatalError()}\ttindex{Py_FatalError()}. | 
|  | 332 | \withsubitem{(in module sys)}{\ttindex{argv}} | 
|  | 333 | % XXX impl. doesn't seem consistent in allowing 0/NULL for the params; | 
|  | 334 | % check w/ Guido. | 
|  | 335 | \end{cfuncdesc} | 
|  | 336 |  | 
|  | 337 | % XXX Other PySys thingies (doesn't really belong in this chapter) | 
|  | 338 |  | 
|  | 339 | \section{Thread State and the Global Interpreter Lock | 
|  | 340 | \label{threads}} | 
|  | 341 |  | 
|  | 342 | \index{global interpreter lock} | 
|  | 343 | \index{interpreter lock} | 
|  | 344 | \index{lock, interpreter} | 
|  | 345 |  | 
|  | 346 | The Python interpreter is not fully thread safe.  In order to support | 
|  | 347 | multi-threaded Python programs, there's a global lock that must be | 
|  | 348 | held by the current thread before it can safely access Python objects. | 
|  | 349 | Without the lock, even the simplest operations could cause problems in | 
|  | 350 | a multi-threaded program: for example, when two threads simultaneously | 
|  | 351 | increment the reference count of the same object, the reference count | 
|  | 352 | could end up being incremented only once instead of twice. | 
|  | 353 |  | 
|  | 354 | Therefore, the rule exists that only the thread that has acquired the | 
|  | 355 | global interpreter lock may operate on Python objects or call Python/C | 
|  | 356 | API functions.  In order to support multi-threaded Python programs, | 
|  | 357 | the interpreter regularly releases and reacquires the lock --- by | 
| Skip Montanaro | eec26f9 | 2003-07-02 21:38:34 +0000 | [diff] [blame] | 358 | default, every 100 bytecode instructions (this can be changed with | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 359 | \withsubitem{(in module sys)}{\ttindex{setcheckinterval()}} | 
|  | 360 | \function{sys.setcheckinterval()}).  The lock is also released and | 
|  | 361 | reacquired around potentially blocking I/O operations like reading or | 
|  | 362 | writing a file, so that other threads can run while the thread that | 
|  | 363 | requests the I/O is waiting for the I/O operation to complete. | 
|  | 364 |  | 
|  | 365 | The Python interpreter needs to keep some bookkeeping information | 
|  | 366 | separate per thread --- for this it uses a data structure called | 
| Andrew M. Kuchling | d9dfe02 | 2004-07-10 13:48:54 +0000 | [diff] [blame] | 367 | \ctype{PyThreadState}\ttindex{PyThreadState}.  There's one global | 
|  | 368 | variable, however: the pointer to the current | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 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} | 
| Andrew M. Kuchling | ff8113f | 2004-07-10 13:42:52 +0000 | [diff] [blame] | 473 | PyGILState_STATE gstate; | 
|  | 474 | gstate = PyGILState_Ensure(); | 
| Guido van Rossum | 41bcbe3 | 2003-03-02 13:17:20 +0000 | [diff] [blame] | 475 |  | 
|  | 476 | /* Perform Python actions here.  */ | 
|  | 477 | result = CallSomeFunction(); | 
|  | 478 | /* evaluate result */ | 
|  | 479 |  | 
|  | 480 | /* Release the thread. No Python API allowed beyond this point. */ | 
| Andrew M. Kuchling | ff8113f | 2004-07-10 13:42:52 +0000 | [diff] [blame] | 481 | PyGILState_Release(gstate); | 
| Guido van Rossum | 41bcbe3 | 2003-03-02 13:17:20 +0000 | [diff] [blame] | 482 | \end{verbatim} | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 483 |  | 
|  | 484 | \begin{ctypedesc}{PyInterpreterState} | 
|  | 485 | This data structure represents the state shared by a number of | 
|  | 486 | cooperating threads.  Threads belonging to the same interpreter | 
|  | 487 | share their module administration and a few other internal items. | 
|  | 488 | There are no public members in this structure. | 
|  | 489 |  | 
|  | 490 | Threads belonging to different interpreters initially share nothing, | 
|  | 491 | except process state like available memory, open file descriptors | 
|  | 492 | and such.  The global interpreter lock is also shared by all | 
|  | 493 | threads, regardless of to which interpreter they belong. | 
|  | 494 | \end{ctypedesc} | 
|  | 495 |  | 
|  | 496 | \begin{ctypedesc}{PyThreadState} | 
|  | 497 | This data structure represents the state of a single thread.  The | 
|  | 498 | only public data member is \ctype{PyInterpreterState | 
|  | 499 | *}\member{interp}, which points to this thread's interpreter state. | 
|  | 500 | \end{ctypedesc} | 
|  | 501 |  | 
|  | 502 | \begin{cfuncdesc}{void}{PyEval_InitThreads}{} | 
|  | 503 | Initialize and acquire the global interpreter lock.  It should be | 
|  | 504 | called in the main thread before creating a second thread or | 
|  | 505 | engaging in any other thread operations such as | 
|  | 506 | \cfunction{PyEval_ReleaseLock()}\ttindex{PyEval_ReleaseLock()} or | 
|  | 507 | \code{PyEval_ReleaseThread(\var{tstate})}\ttindex{PyEval_ReleaseThread()}. | 
|  | 508 | It is not needed before calling | 
|  | 509 | \cfunction{PyEval_SaveThread()}\ttindex{PyEval_SaveThread()} or | 
|  | 510 | \cfunction{PyEval_RestoreThread()}\ttindex{PyEval_RestoreThread()}. | 
|  | 511 |  | 
|  | 512 | This is a no-op when called for a second time.  It is safe to call | 
|  | 513 | this function before calling | 
|  | 514 | \cfunction{Py_Initialize()}\ttindex{Py_Initialize()}. | 
|  | 515 |  | 
|  | 516 | When only the main thread exists, no lock operations are needed. | 
|  | 517 | This is a common situation (most Python programs do not use | 
|  | 518 | threads), and the lock operations slow the interpreter down a bit. | 
|  | 519 | Therefore, the lock is not created initially.  This situation is | 
| Tim Peters | 7f468f2 | 2004-10-11 02:40:51 +0000 | [diff] [blame^] | 520 | equivalent to having acquired the lock:  when there is only a single | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 521 | thread, all object accesses are safe.  Therefore, when this function | 
|  | 522 | initializes the lock, it also acquires it.  Before the Python | 
|  | 523 | \module{thread}\refbimodindex{thread} module creates a new thread, | 
|  | 524 | knowing that either it has the lock or the lock hasn't been created | 
|  | 525 | yet, it calls \cfunction{PyEval_InitThreads()}.  When this call | 
| Tim Peters | 7f468f2 | 2004-10-11 02:40:51 +0000 | [diff] [blame^] | 526 | returns, it is guaranteed that the lock has been created and that the | 
|  | 527 | calling thread has acquired it. | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 528 |  | 
|  | 529 | It is \strong{not} safe to call this function when it is unknown | 
|  | 530 | which thread (if any) currently has the global interpreter lock. | 
|  | 531 |  | 
|  | 532 | This function is not available when thread support is disabled at | 
|  | 533 | compile time. | 
|  | 534 | \end{cfuncdesc} | 
|  | 535 |  | 
| Tim Peters | 7f468f2 | 2004-10-11 02:40:51 +0000 | [diff] [blame^] | 536 | \begin{cfuncdesc}{int}{PyEval_ThreadsInitialized}{} | 
|  | 537 | Returns a non-zero value if \cfunction{PyEval_InitThreads()} has been | 
|  | 538 | called.  This function can be called without holding the lock, and | 
|  | 539 | therefore can be used to avoid calls to the locking API when running | 
|  | 540 | single-threaded.  This function is not available when thread support | 
|  | 541 | is disabled at compile time. \versionadded{2.4} | 
|  | 542 | \end{cfuncdesc} | 
|  | 543 |  | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 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 |  | 
| Andrew M. Kuchling | 371d98a | 2004-07-10 13:31:18 +0000 | [diff] [blame] | 702 | \begin{cfuncdesc}{PyGILState_STATE}{PyGILState_Ensure}{} | 
|  | 703 | Ensure that the current thread is ready to call the Python | 
|  | 704 | C API regardless of the current state of Python, or of its | 
|  | 705 | thread lock.  This may be called as many times as desired | 
|  | 706 | by a thread as long as each call is matched with a call to | 
|  | 707 | \cfunction{PyGILState_Release()}. | 
|  | 708 | In general, other thread-related APIs may | 
|  | 709 | be used between \cfunction{PyGILState_Ensure()} and \cfunction{PyGILState_Release()} calls as long as the | 
|  | 710 | thread state is restored to its previous state before the Release(). | 
|  | 711 | For example, normal usage of the \csimplemacro{Py_BEGIN_ALLOW_THREADS} | 
|  | 712 | and \csimplemacro{Py_END_ALLOW_THREADS} macros is acceptable. | 
|  | 713 |  | 
|  | 714 | The return value is an opaque "handle" to the thread state when | 
|  | 715 | \cfunction{PyGILState_Acquire()} was called, and must be passed to | 
|  | 716 | \cfunction{PyGILState_Release()} to ensure Python is left in the same | 
|  | 717 | state. Even though recursive calls are allowed, these handles | 
|  | 718 | \emph{cannot} be shared - each unique call to | 
|  | 719 | \cfunction{PyGILState_Ensure} must save the handle for its call to | 
|  | 720 | \cfunction{PyGILState_Release}. | 
|  | 721 |  | 
|  | 722 | When the function returns, the current thread will hold the GIL. | 
|  | 723 | Failure is a fatal error. | 
|  | 724 | \versionadded{2.3} | 
|  | 725 | \end{cfuncdesc} | 
|  | 726 |  | 
|  | 727 | \begin{cfuncdesc}{void}{PyGILState_Release}{PyGILState_STATE} | 
|  | 728 | Release any resources previously acquired.  After this call, Python's | 
|  | 729 | state will be the same as it was prior to the corresponding | 
| Andrew M. Kuchling | ff8113f | 2004-07-10 13:42:52 +0000 | [diff] [blame] | 730 | \cfunction{PyGILState_Ensure} call (but generally this state will be | 
|  | 731 | unknown to the caller, hence the use of the GILState API.) | 
| Andrew M. Kuchling | 371d98a | 2004-07-10 13:31:18 +0000 | [diff] [blame] | 732 |  | 
|  | 733 | Every call to \cfunction{PyGILState_Ensure()} must be matched by a call to | 
|  | 734 | \cfunction{PyGILState_Release()} on the same thread. | 
|  | 735 | \versionadded{2.3} | 
|  | 736 | \end{cfuncdesc} | 
|  | 737 |  | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 738 |  | 
|  | 739 | \section{Profiling and Tracing \label{profiling}} | 
|  | 740 |  | 
|  | 741 | \sectionauthor{Fred L. Drake, Jr.}{fdrake@acm.org} | 
|  | 742 |  | 
|  | 743 | The Python interpreter provides some low-level support for attaching | 
|  | 744 | profiling and execution tracing facilities.  These are used for | 
|  | 745 | profiling, debugging, and coverage analysis tools. | 
|  | 746 |  | 
|  | 747 | Starting with Python 2.2, the implementation of this facility was | 
|  | 748 | substantially revised, and an interface from C was added.  This C | 
|  | 749 | interface allows the profiling or tracing code to avoid the overhead | 
|  | 750 | of calling through Python-level callable objects, making a direct C | 
|  | 751 | function call instead.  The essential attributes of the facility have | 
|  | 752 | not changed; the interface allows trace functions to be installed | 
|  | 753 | per-thread, and the basic events reported to the trace function are | 
|  | 754 | the same as had been reported to the Python-level trace functions in | 
|  | 755 | previous versions. | 
|  | 756 |  | 
|  | 757 | \begin{ctypedesc}[Py_tracefunc]{int (*Py_tracefunc)(PyObject *obj, | 
|  | 758 | PyFrameObject *frame, int what, | 
|  | 759 | PyObject *arg)} | 
|  | 760 | The type of the trace function registered using | 
|  | 761 | \cfunction{PyEval_SetProfile()} and \cfunction{PyEval_SetTrace()}. | 
|  | 762 | The first parameter is the object passed to the registration | 
|  | 763 | function as \var{obj}, \var{frame} is the frame object to which the | 
|  | 764 | event pertains, \var{what} is one of the constants | 
| Nicholas Bastin | c69ebe8 | 2004-03-24 21:57:10 +0000 | [diff] [blame] | 765 | \constant{PyTrace_CALL}, \constant{PyTrace_EXCEPTION}, | 
|  | 766 | \constant{PyTrace_LINE}, \constant{PyTrace_RETURN}, | 
|  | 767 | \constant{PyTrace_C_CALL}, \constant{PyTrace_C_EXCEPTION}, | 
|  | 768 | or \constant{PyTrace_C_RETURN}, and \var{arg} | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 769 | depends on the value of \var{what}: | 
|  | 770 |  | 
|  | 771 | \begin{tableii}{l|l}{constant}{Value of \var{what}}{Meaning of \var{arg}} | 
|  | 772 | \lineii{PyTrace_CALL}{Always \NULL.} | 
| Nicholas Bastin | c69ebe8 | 2004-03-24 21:57:10 +0000 | [diff] [blame] | 773 | \lineii{PyTrace_EXCEPTION}{Exception information as returned by | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 774 | \function{sys.exc_info()}.} | 
|  | 775 | \lineii{PyTrace_LINE}{Always \NULL.} | 
|  | 776 | \lineii{PyTrace_RETURN}{Value being returned to the caller.} | 
| Nicholas Bastin | c69ebe8 | 2004-03-24 21:57:10 +0000 | [diff] [blame] | 777 | \lineii{PyTrace_C_CALL}{Name of function being called.} | 
|  | 778 | \lineii{PyTrace_C_EXCEPTION}{Always \NULL.} | 
|  | 779 | \lineii{PyTrace_C_RETURN}{Always \NULL.} | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 780 | \end{tableii} | 
|  | 781 | \end{ctypedesc} | 
|  | 782 |  | 
|  | 783 | \begin{cvardesc}{int}{PyTrace_CALL} | 
|  | 784 | The value of the \var{what} parameter to a \ctype{Py_tracefunc} | 
|  | 785 | function when a new call to a function or method is being reported, | 
|  | 786 | or a new entry into a generator.  Note that the creation of the | 
|  | 787 | iterator for a generator function is not reported as there is no | 
|  | 788 | control transfer to the Python bytecode in the corresponding frame. | 
|  | 789 | \end{cvardesc} | 
|  | 790 |  | 
| Nicholas Bastin | c69ebe8 | 2004-03-24 21:57:10 +0000 | [diff] [blame] | 791 | \begin{cvardesc}{int}{PyTrace_EXCEPTION} | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 792 | The value of the \var{what} parameter to a \ctype{Py_tracefunc} | 
| Fred Drake | 5bf1ecd | 2001-10-16 19:23:55 +0000 | [diff] [blame] | 793 | function when an exception has been raised.  The callback function | 
|  | 794 | is called with this value for \var{what} when after any bytecode is | 
|  | 795 | processed after which the exception becomes set within the frame | 
| Martin v. Löwis | 95cf84a | 2003-10-19 07:32:24 +0000 | [diff] [blame] | 796 | being executed.  The effect of this is that as exception propagation | 
| Fred Drake | 5bf1ecd | 2001-10-16 19:23:55 +0000 | [diff] [blame] | 797 | causes the Python stack to unwind, the callback is called upon | 
| Thomas Heller | ead60e5 | 2002-12-06 22:42:13 +0000 | [diff] [blame] | 798 | return to each frame as the exception propagates.  Only trace | 
| Fred Drake | 5bf1ecd | 2001-10-16 19:23:55 +0000 | [diff] [blame] | 799 | functions receives these events; they are not needed by the | 
|  | 800 | profiler. | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 801 | \end{cvardesc} | 
|  | 802 |  | 
|  | 803 | \begin{cvardesc}{int}{PyTrace_LINE} | 
|  | 804 | The value passed as the \var{what} parameter to a trace function | 
|  | 805 | (but not a profiling function) when a line-number event is being | 
|  | 806 | reported. | 
|  | 807 | \end{cvardesc} | 
|  | 808 |  | 
|  | 809 | \begin{cvardesc}{int}{PyTrace_RETURN} | 
|  | 810 | 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] | 811 | functions when a call is returning without propagating an exception. | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 812 | \end{cvardesc} | 
|  | 813 |  | 
| Nicholas Bastin | c69ebe8 | 2004-03-24 21:57:10 +0000 | [diff] [blame] | 814 | \begin{cvardesc}{int}{PyTrace_C_CALL} | 
|  | 815 | The value for the \var{what} parameter to \ctype{Py_tracefunc} | 
|  | 816 | functions when a C function is about to be called. | 
|  | 817 | \end{cvardesc} | 
|  | 818 |  | 
|  | 819 | \begin{cvardesc}{int}{PyTrace_C_EXCEPTION} | 
|  | 820 | The value for the \var{what} parameter to \ctype{Py_tracefunc} | 
|  | 821 | functions when a C function has thrown an exception. | 
|  | 822 | \end{cvardesc} | 
|  | 823 |  | 
|  | 824 | \begin{cvardesc}{int}{PyTrace_C_RETURN} | 
|  | 825 | The value for the \var{what} parameter to \ctype{Py_tracefunc} | 
|  | 826 | functions when a C function has returned. | 
|  | 827 | \end{cvardesc} | 
|  | 828 |  | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 829 | \begin{cfuncdesc}{void}{PyEval_SetProfile}{Py_tracefunc func, PyObject *obj} | 
|  | 830 | Set the profiler function to \var{func}.  The \var{obj} parameter is | 
|  | 831 | passed to the function as its first parameter, and may be any Python | 
|  | 832 | object, or \NULL.  If the profile function needs to maintain state, | 
|  | 833 | using a different value for \var{obj} for each thread provides a | 
|  | 834 | convenient and thread-safe place to store it.  The profile function | 
|  | 835 | is called for all monitored events except the line-number events. | 
|  | 836 | \end{cfuncdesc} | 
|  | 837 |  | 
|  | 838 | \begin{cfuncdesc}{void}{PyEval_SetTrace}{Py_tracefunc func, PyObject *obj} | 
| Raymond Hettinger | f17d65d | 2003-08-12 00:01:16 +0000 | [diff] [blame] | 839 | Set the tracing function to \var{func}.  This is similar to | 
| Fred Drake | 3adf79e | 2001-10-12 19:01:43 +0000 | [diff] [blame] | 840 | \cfunction{PyEval_SetProfile()}, except the tracing function does | 
|  | 841 | receive line-number events. | 
|  | 842 | \end{cfuncdesc} | 
|  | 843 |  | 
|  | 844 |  | 
|  | 845 | \section{Advanced Debugger Support \label{advanced-debugging}} | 
|  | 846 | \sectionauthor{Fred L. Drake, Jr.}{fdrake@acm.org} | 
|  | 847 |  | 
|  | 848 | These functions are only intended to be used by advanced debugging | 
|  | 849 | tools. | 
|  | 850 |  | 
|  | 851 | \begin{cfuncdesc}{PyInterpreterState*}{PyInterpreterState_Head}{} | 
|  | 852 | Return the interpreter state object at the head of the list of all | 
|  | 853 | such objects. | 
|  | 854 | \versionadded{2.2} | 
|  | 855 | \end{cfuncdesc} | 
|  | 856 |  | 
|  | 857 | \begin{cfuncdesc}{PyInterpreterState*}{PyInterpreterState_Next}{PyInterpreterState *interp} | 
|  | 858 | Return the next interpreter state object after \var{interp} from the | 
|  | 859 | list of all such objects. | 
|  | 860 | \versionadded{2.2} | 
|  | 861 | \end{cfuncdesc} | 
|  | 862 |  | 
|  | 863 | \begin{cfuncdesc}{PyThreadState *}{PyInterpreterState_ThreadHead}{PyInterpreterState *interp} | 
|  | 864 | Return the a pointer to the first \ctype{PyThreadState} object in | 
|  | 865 | the list of threads associated with the interpreter \var{interp}. | 
|  | 866 | \versionadded{2.2} | 
|  | 867 | \end{cfuncdesc} | 
|  | 868 |  | 
|  | 869 | \begin{cfuncdesc}{PyThreadState*}{PyThreadState_Next}{PyThreadState *tstate} | 
|  | 870 | Return the next thread state object after \var{tstate} from the list | 
|  | 871 | of all such objects belonging to the same \ctype{PyInterpreterState} | 
|  | 872 | object. | 
|  | 873 | \versionadded{2.2} | 
|  | 874 | \end{cfuncdesc} |