[PyKDE] Py_BEGIN_ALLOW_THREADS

Phil Thompson phil at river-bank.demon.co.uk
Fri Jul 12 11:11:00 BST 2002


On Friday 12 July 2002 4:13 am, Donovan Rebbechi wrote:
> I've noticed that sip generated code wraps C++ calls in a block like this:
>
> Py_BEGIN_THREADS
>
> Py_END_ALLOW_THREADS
>
> From my own experimentation (or blundering), I  gather that I need to
> place C++ calls in such a block, and need to make sure I don't return
> or set the error handle from inside it. Is this correct ? I'm confused
> about why calling a C++ function would require unblocking (I get
> PyThreadState_Get: no current thread if I don't use these blocks)

It requiries unblocking to guarantee that the state is unblocked when the 
generated code next tries to make a call to the Python API. You might think 
that you know when the next call would be (ie. after the call to your C++ 
function returns) so why bother with the overhead - but you have no idea what 
the C++ function might do. It might switch thread contexts, or it might call 
a C++ virtual method that has been re-implemented in Python.

Phil




More information about the PyQt mailing list