[Python-Dev] Const access to CPython objects outside of GIL?
one of our Python projects calls for pretty heavy, low-level optimizations.
We went down the rabbit hole and determined that having access to
PyList_GET_ITEM(list), PyInt_AS_LONG(int) and PyDict_GetItem(dict, unicode)
on Python objects **outside of GIL** might be a good-enough solution. The
Python objects in question are guaranteed to live and not be mutated
externally in any way. They're "frozen" and read-only.
Under what conditions is it OK to call these 3 functions on such objects?
More generally, what is the CPython 2.7/3.5 contract regarding (lack of)
object mutation, and the need for reference counting and synchronization
Which C API functions are safe to call on "const" objects?
Obviously releasing GIL and then calling C API is hacky, but from initial
experiments, it seems to work (see
But I'm wondering if there's a more formal contract around this behaviour.
-------------- next part --------------
An HTML attachment was scrubbed...