On Friday 13 June 2008 1:45:09 pm Arve Knudsen wrote: > On 6/13/08, Phil Thompson <[EMAIL PROTECTED]> wrote: > > On Friday 13 June 2008 10:54:47 am Arve Knudsen wrote: > > > Py_BEGIN_ALLOW_THREADS/Py_END_ALLOW_THREADS in the API: > > > PyGILState_Ensure/PyGILState_Release. Could SIP make use of these > > > functions instead? > > > > They are not alternatives. One pair frees the GIL for a period, the other > > acquires the GIL for a period. > > In order to free the GIL, you have to acquire it first no? Therefore, > BEGIN_ALLOW/END_ALLOW, should correspond to GILState_Release of a > previously Ensure'd GIL state and then a new call to > PyGILState_Ensure. Besides, the Python docs > (http://docs.python.org/api/threads.html) present the PyGILState_* > functions as a simpler alternative to Py_BEGIN_ALLOW_THREADS et al.
The documentation is misleading at best. Both pairs are intended to be used in the same scope. Ensure/Release make it easier to use across different scopes and to use Release then Ensure if you want to - but you then have to maintain a separate stack of the GIL states. If you use them the way they are supposed to be used then you use the C stack - see the definition of SIP_BLOCK_THREADS and SIP_UNBLOCK_THREADS. Phil _______________________________________________ PyQt mailing list [email protected] http://www.riverbankcomputing.com/mailman/listinfo/pyqt
