码迷,mamicode.com
首页 > 编程语言 > 详细

c++线程调用python

时间:2015-02-09 15:57:14      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

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 ;  //该锁在方法执行完成后释放

 

c++线程调用python

标签:

原文地址:http://www.cnblogs.com/gaoxing/p/4281616.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!