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