问题
主程序(C++)加载多个so,so里有python的,也有c++的,并且有的C++的so里会有多个线程;会出现多个线程解析并调用python so的问题;会发现,除了wrapper so(直接解析python so的so)里起的线程,其他线程解析时,就会出现SEGMENT现象;
原因
说到底就是GIL的问题,有兴趣的同学可以去查一下,再次不赘述(对python了解不多,只是有个基本的了解,不误人子弟了)
解决方案
参考:
Embedding a Python interpreter in a multi-threaded C++ program with pybind11
具体实现:
- 在wrapper的类的构造函数以及每个涉及到python so的接口的解析及调用的函数内,都添加 py::gil_scoped_acquire acquire; 来获取GIL;
- 在定义python解释器的时候,需要手动释放一次GIL: