I am using numpy 1.6.1 and scipy 0.9.0 via system packages python-numpy and python-scipy on Ubuntu 12.04.  In both the paraview python console and programmable filter, importing certain scipy modules, for example, scipy.stats, causes paraview to hang.  This issue is related to the python global interpreter lock (GIL), the program hangs on  PyGILState_Ensure().  Here is the backtrace:<br>


<br><br>#0  sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:86<br>#1  0x00007ffff1e90c28 in PyThread_acquire_lock () from /usr/lib/libpython2.7.so.1.0<br>#2  0x00007ffff1e91b34 in PyEval_RestoreThread () from /usr/lib/libpython2.7.so.1.0<br>


#3  0x00007ffff1e58d08 in PyGILState_Ensure () from /usr/lib/libpython2.7.so.1.0<br>#4  0x00007fffca31ffc6 in ?? () from /usr/lib/python2.7/dist-packages/numpy/core/umath.so<br>#5  0x00007fffca320357 in ?? () from /usr/lib/python2.7/dist-packages/numpy/core/umath.so<br>


#6  0x00007fffca337633 in ?? () from /usr/lib/python2.7/dist-packages/numpy/core/umath.so<br>#7  0x00007fffca337ac6 in ?? () from /usr/lib/python2.7/dist-packages/numpy/core/umath.so<br>#8  0x00007ffff1e47e83 in PyObject_Call () from /usr/lib/libpython2.7.so.1.0<br>


...<br><br><br>This could be a bug in scipy/numpy.  The issue does not appear for older versions of numpy/scipy.  But, it is likely caused by the interaction with ParaView&#39;s usage of Py_NewInterpreter.  The paraview class vtkPVPythonInterpretor uses the Python C-API function Py_NewInterpreter in order to create insulated interpreters.  The documentation for Py_NewInterpreter warns users to be very careful mixing it with the GIL.  For example, it says:<br>


<br>&quot;Note that the PyGILState_*() functions assume there is only one global interpreter (created automatically by Py_Initialize()). Python supports the creation of additional interpreters (using Py_NewInterpreter()), but mixing multiple interpreters and the PyGILState_*() API is unsupported.&quot;<br>


<br>and<br><br>&quot;Also note that combining this functionality with PyGILState_*() APIs is delicate, because these APIs assume a bijection between Python thread states and OS-level threads, an assumption broken by the presence of sub-interpreters.&quot;<br>


<br>(  <a href="http://docs.python.org/c-api/init.html">docs.python.org/c-api/init.html</a>  )<br><br><br>Perhaps it is possible to work around this particular hangup by compiling numpy/scipy with threading disabled or some other flag to disable their usage of the GIL.  But, ParaView&#39;s usage of Py_NewInterpreter also makes it difficult to use other libraries correctly, like PyQt4 or PySide for example.  I that at some in the future we might want to consider removal of Py_NewInterpreter from paraview.<br>


<br><br>Pat<br>