c++线程调用python

c++调用python,底层就似乎fork一个子进程启动一个python的解释器,执行python文件,由于python解释器维护了一个内部状态,所以如果c++程序是多线程,每个线程都调用python,那么python就会报错,解决的方式就是在主线程中给python解释器加一个全局锁。当一个线程调用python的时候,别的线程等待。问题出现了整个c++如果逻辑都在python里面,那个c++的多线程就失去了意义。

 

Py_Initialize() ;
PyEval_InitThreads() ;
pMainThreadState = PyThreadState_Get() ;
PyEval_ReleaseLock() ;

//TODO 启动多线程

PyGILState_Ensure() ;
Py_Finalize() ;

在每个子线程调用的方法里面(需要调用python)都需要先去获取一个python的全局锁:

 PythonExecThrLock _pyLock ;  //该锁在方法执行完成后释放

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。