使用SWIG将C ++库包装在Python中。我们可以在Python中实例化一个类,当我们在这个使用Python C API的类中调用一个方法时会出现这个错误:
致命Python错误:PyThreadState_Get:没有当前线程 中止陷阱:6
如果我们在C中调用Python之前插入Py_BEGIN_ALLOW_THREADS,那么错误就会变成Segmentation fault。
这似乎是Python调用C调用Python的问题,不是吗?有什么想法吗?
答案 0 :(得分:0)
在从C调用python之前,您需要确保使用PyGILState_Ensure()
锁定GIL,并且在调用之后您可以使用PyGILState_Release()
释放GIL。更多信息:
https://docs.python.org/2/c-api/init.html?highlight=gil#PyGILState_Ensure