You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Clarify the Purpose of the PyGILState API and Identify Better Alternatives #131267
The PyGILState_* C-API was introduced by PEP 311 as a convenience for extension maintainers for some very specific situations:
code running in the current thread does not know if it holds the GIL
this situation may involve reentrancy
The PyGILState_* API also (almost incidentally) supports use cases that are more appropriately satisfied by other API, like Py_BEGIN_ALLOW_THREADS()/Py_END_ALLOW_THREADS() for balanced acquire-release.
The documentation isn't so clear about the specific use cases, nor that an interested user may actually want a different API. For example, from a recent issue I saw: We were wrapping each evaluation in PyGILState_Ensure and PyGILState_Release, which I believe is a correct way to do this.
FWIW, I expect that it is easier now to deal with the motivating cases using the exiting C-API than it was in 2003. I'm not sure we would accept something like PEP 311 if it were proposed today. Then again, for a pair of operations that needs to balanced like this, having a specific pair of functions is helpful.
Activity
sharktide commentedon Mar 15, 2025
@ericsnowcurrently I can make a pull request if you would like
ZeroIntensity commentedon Mar 17, 2025
PTAL at #131087, which implements the "alternatives" part here.