[Python-Dev] Change definition of Py_END_ALLOW_THREADS?
Guido van Rossum
guido@python.org
Thu, 13 Feb 2003 17:33:44 -0500
> > Should there be Py_BEGIN_AUTO_THREAD_STATE_ENSURE and
> > Py_END_AUTO_THREAD_STATE_ENSURE macros (analogous to
> > Py_BEGIN_ALLOW_THREADS/Py_END_ALLOW_THREADS) as well,
> > then?
>
> I'm not sure we can really get away with this. For C code, a common pattern
> will need to be:
>
> PyAutoThreadState_State state;
> .. some code
> state = PyAutoThreadState_Ensure();
> ... more code
> PyAutoThreadState_Ensure(state);
> }
>
> We actually need all 3 blocks. Unlike Py_BEGIN_ALLOW_THREADS, we can't
> create a new scope to declare a local variable in, as that variable is
> needed by the outer most scope.
>
> I guess:
> Py_AUTO_THREAD_STATE_DECLARE
> Py_AUTO_THREAD_STATE_ENSURE
> Py_AUTO_THREAD_STATE_RELEASE
>
> would work.
The macros don't look more attractive than the explicit code.
> OTOH, in the code I am patching there already exists "#ifdef
> __cplusplus" - I am so tempted to add a tiny little extra block
> define a helper C++ class in the Python sources for managing this.
> However, if I do that I fear the Spanish Inquisition will look like
> a stroll in the park <wink>
Cardinal Biggles, get the soft cushions!
Actually, relying on C++ would be bad, since this might be useful
outside Windows as well.
--Guido van Rossum (home page: http://www.python.org/~guido/)