C++ библиотека обернута в Python с помощью SWIG. Мы можем создать экземпляр класса в Python, и когда мы вызываем метод в этом классе, который использует API Python C, возникает эта ошибка:
Неустранимая ошибка Python: PyThreadState_Get: нет текущей нити Abort trap: 6
Если мы вставим Py_BEGIN_ALLOW_THREADS перед вызовом Python в C, тогда ошибка превратится в ошибку сегментации.
Кажется, это проблема с вызовом Python C, который вызывает Python, нет? Есть идеи?
Перед вызовом python с C вам необходимо убедиться, что GIL заблокирован с помощью PyGILState_Ensure()
и после вызова вы можете освободить GIL с помощью PyGILState_Release()
. Для большего:
https://docs.python.org/2/c-api/init.html?highlight=gil#PyGILState_Ensure