On Tue, Aug 14, 2012 at 3:13 PM, Charles R Harris <[email protected]> wrote: > > > On Tue, Aug 14, 2012 at 7:47 AM, Aron Ahmadia <[email protected]> wrote: >> >> Hi all, >> >> Installing numpy 1.6.2 against a Python interpreter built with the >> --without threads currently fails due to missing references to >> PyGILState_Ensure and PyGILState_Release. The references appear to be >> coming from the following code in nditer.c.src: >> >> NPY_NO_EXPORT void >> NpyIter_DebugPrint(NpyIter *iter) >> { >> // <snip> >> PyGILState_STATE gilstate = PyGILState_Ensure(); >> // <snip> >> PyGILState_Release(gilstate); >> } >> >> Since this is debugging code, I'm guessing it doesn't get called very >> frequently, and I could probably just #ifdef it out or use the NPY macros >> for grabbing the GIL for a non-threaded build: (NPY_ALLOW_C_API and >> NPY_DISABLE_C_API), but I don't understand why it's grabbing the GIL in the >> first place. Where is it calling into the interpreter? Does it need the >> GIL for something else? I'm hesitant to touch this code and issue a pull >> request until I understand what it's trying to do. >> >> Heading on over to the master branch at numpy/numpy, I'm starting to >> notice more unprotected PyGILState references creeping into the development >> code. Even the Python developers seem to think that nobody is using >> --without-threaded, so I'm not going to make a strong case for being more >> careful, but I do want to point it out in case you want to keep the numpy >> sources correct for this case. >> > > Some parts of the numpy code release the GIL, so it needs to be reacquired > in order to call the Python C_API. A quick look shows a call to > PyObject_Print in the function and there may be other such calls. The right > fix is probably to use a couple of ifdefs if there is an easy way to > determine the Python interpreter configuration <looks>... WITH_THREAD seems > to be the right flag. > > #ifdef WITH_THREAD > PyAPI_FUNC(void) PyThreadState_DeleteCurrent(void); > #endif > > Could you give that a shot? TIA,
The NPY_*_THREADS macros appear to already check for WITH_THREAD automatically. I think we'd be happy to apply a patch that cleans up numpy's direct PyGIL_* calls to use the NPY_*_THREADS macros instead. -n _______________________________________________ NumPy-Discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
