Обертывание библиотеки C ++ в Python, которая вызывает API-интерфейс Python C

0

C++ библиотека обернута в Python с помощью SWIG. Мы можем создать экземпляр класса в Python, и когда мы вызываем метод в этом классе, который использует API Python C, возникает эта ошибка:

Неустранимая ошибка Python: PyThreadState_Get: нет текущей нити Abort trap: 6

Если мы вставим Py_BEGIN_ALLOW_THREADS перед вызовом Python в C, тогда ошибка превратится в ошибку сегментации.

Кажется, это проблема с вызовом Python C, который вызывает Python, нет? Есть идеи?

  • 0
    SWIG актуален? Используете ли вы какие-либо пользовательские карты типов, о которых мы должны знать?
  • 0
    Я использую SWIG версии 2.0.11 и никаких пользовательских типов карт
Показать ещё 1 комментарий
Теги:
swig

1 ответ

0

Перед вызовом python с C вам необходимо убедиться, что GIL заблокирован с помощью PyGILState_Ensure() и после вызова вы можете освободить GIL с помощью PyGILState_Release(). Для большего:

https://docs.python.org/2/c-api/init.html?highlight=gil#PyGILState_Ensure

Ещё вопросы

Сообщество Overcoder
Наверх
Меню