用Python包装一个C++库,该库调用Python C API
Wrapping a C++ library in Python that calls the Python C API
C++库使用SWIG封装在Python中。我们可以在Python中实例化一个类,当我们调用该类中使用Python C API的方法时,会出现以下错误:
Python致命错误:PyThreadState_Get:没有当前线程中止陷阱:6
如果我们在C中调用Python之前插入Py_BEGIN_ALLOW_THREADS,那么错误就会变成Segmentation错误。
这似乎是Python调用C的问题,而C调用Python,不是吗?有什么想法吗?
在从C调用python之前,您需要确保使用PyGILState_Ensure()
锁定GIL,并且在调用之后,您可以使用PyGILState_Release()
释放GIL。更多信息:
https://docs.python.org/2/c-api/init.html?highlight=gil#PyGILState_Ensure
相关文章:
- 如何将真正的字符串从python c-api转换为python脚本
- 使用 Python Extension API 包装复杂C++类
- Python to C++ Data structure API
- Python C API:使用 MSVC 尝试示例模块时的访问冲突
- xgboost C API 不会产生与 Python 相同的结果
- 如何仅使用 c/python API 将 c++ 成员函数绑定到 python?
- 如何从主线程正确释放 Python C API GIL
- Python API用于解析包含数组格式的protobuf数据的二进制文件
- Windows API "CreateWindowEx" 在 Python (3.6.8) 64 位使用的 DLL 中工作吗?
- 如何在TensorFlow C API(例如Python)中设置轴
- Valgrind 错误和内存泄漏与 Python/C API
- Python C API-具有可变的参数数量的过载函数
- 使用Python C API时的奇怪记忆行为
- 使用 Python API 获取 Maya 中的引用节点列表
- 检索应用程序提供的所有Python API的列表
- FileStorage for OpenCV Python API
- C/Python API未执行函数
- 使用c++ python API逐行执行python脚本
- Python API for C++
- GDB Python API:.parse_and_eval() 不会让 .cast() 和 .dereference() 变得多余吗?