diff options
author | Fred Drake <fdrake@acm.org> | 2005-01-19 04:18:39 (GMT) |
---|---|---|
committer | Fred Drake <fdrake@acm.org> | 2005-01-19 04:18:39 (GMT) |
commit | 140042446fa244d865eca81558970519040af2ab (patch) | |
tree | 490db542021e6b18b2e60037557ae61fd4ae699b | |
parent | b184ae860e7a1922918a1822274fb7bacacde163 (diff) | |
download | cpython-140042446fa244d865eca81558970519040af2ab.zip cpython-140042446fa244d865eca81558970519040af2ab.tar.gz cpython-140042446fa244d865eca81558970519040af2ab.tar.bz2 |
Clean up discussion of new C thread idiom
(closes SF patch #1031233; modified)
-rw-r--r-- | Doc/api/init.tex | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/Doc/api/init.tex b/Doc/api/init.tex index 764c932..e8d3583 100644 --- a/Doc/api/init.tex +++ b/Doc/api/init.tex @@ -455,19 +455,10 @@ Python/C API. When they are done, they should reset the thread state pointer, release the lock, and finally free their thread state data structure. -When creating a thread data structure, you need to provide an -interpreter state data structure. The interpreter state data -structure holds global data that is shared by all threads in an -interpreter, for example the module administration -(\code{sys.modules}). Depending on your needs, you can either create -a new interpreter state data structure, or share the interpreter state -data structure used by the Python main thread (to access the latter, -you must obtain the thread state and access its \member{interp} member; -this must be done by a thread that is created by Python or by the main -thread after Python is initialized). - -Assuming you have access to an interpreter object, the typical idiom -for calling into Python from a C thread is +Beginning with version 2.3, threads can now take advantage of the +\cfunction{PyGILState_*()} functions to do all of the above +automatically. The typical idiom for calling into Python from a C +thread is now: \begin{verbatim} PyGILState_STATE gstate; @@ -481,6 +472,13 @@ for calling into Python from a C thread is PyGILState_Release(gstate); \end{verbatim} +Note that the \cfunction{PyGILState_*()} functions assume there is only +one global interpreter (created automatically by +\cfunction{Py_Initialize()}). Python still supports the creation of +additional interpreters (using \cfunction{Py_NewInterpreter()}), but +mixing multiple interpreters and the \cfunction{PyGILState_*()} API is +unsupported. + \begin{ctypedesc}{PyInterpreterState} This data structure represents the state shared by a number of cooperating threads. Threads belonging to the same interpreter |