在Python中包装一个调用Python C API的C ++库

时间:2014-04-10 23:27:40

标签: python c++ c swig

使用SWIG将C ++库包装在Python中。我们可以在Python中实例化一个类,当我们在这个使用Python C API的类中调用一个方法时会出现这个错误:

致命Python错误:PyThreadState_Get:没有当前线程 中止陷阱:6

如果我们在C中调用Python之前插入Py_BEGIN_ALLOW_THREADS,那么错误就会变成Segmentation fault。

这似乎是Python调用C调用Python的问题,不是吗?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在从C调用python之前,您需要确保使用PyGILState_Ensure()锁定GIL,并且在调用之后您可以使用PyGILState_Release()释放GIL。更多信息:

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