[Pyrex] [Cython-dev] Callbacks from threads and PyGILState_Ensure/PyGILState_Release

Stefan Behnel stefan_ml at behnel.de
Fri Sep 14 08:21:42 CEST 2007


Greg Ewing wrote:
> Stefan Behnel wrote:
>> Robert Bradshaw wrote:
>>
>>> 1) Between pyx and pxd files. If we allow them to differ, which takes
>>> precedence?
> 
> They would have to be "sufficiently compatible". If the
> pxd does not annotate, and the pyx annotates as "without
> GIL", that's acceptable, but not the other way around.
> 
> However, I'm not sure there would be any benefit in
> allowing this flexibility, so I would probably just
> require them to match, at least in a first implementation.

Hmmm, have you actually read my post that you stripped from the quote above?

I was proposing the exact opposite: disallow "with GIL" in .pxd files and in
function pre-declarations, and only allow them on the function implementation.
That way, you have them where they are required (and where they make sense)
and you just can't get it wrong because it's declared at the point closest to
the code that requires (or does not require) the GIL.

The reasoning is that you are not gaining anything by declaring a function
signature "with GIL". It might get called from Python code, it might get
called from Cython/Pyrex code holding or not holding the GIL, and it might get
called from third party code as a callback. There is no way Pyrex/Cython can
always make sure it knows if the GIL is held by the calling code. It's C after
all, things can get called from all over the place. So Pyrex/Cython should not
rely on its knowledge about the code it sees and just acquire the GIL inside
the implementation. Which makes it a clear implementation detail that is in no
way interesting to the outside world. It's not a signature issue.

Stefan



More information about the Pyrex mailing list