python多线程应用中的详细介绍


python多线程在应用的时候有不少的事情需要重点的注意。其实只要掌握这些相关的技术段就能保证这个应用的完整。下面我们来看看具体是需要如何进行操作。

今天看了近一天关于多线程的应用中,如何安全调用python多线程方面的资料,开始的时候看的简直头大如斗,被python语言的全局锁(Global Interpreter Lock)、线程状态(Thread State )等都有点绕晕了,后来经过各方面文章和帮助文档的相互参考,发现对于2.4/2.5版本,提供了PyGILState_Ensure, PyGILState_Release,哎,这下可方便大发了。

一、首先定义一个封装类,主要是保证PyGILState_Ensure, PyGILState_Release配对使用,而且这个类是可以嵌套使用的。

  1. #include <python.h> 
  2. class PyThreadStateLock  
  3. {  
  4. public:  
  5. PyThreadStateLock(void)  
  6. {  
  7. state = PyGILState_Ensure( );  
  8. }  
  9. ~PyThreadStateLock(void)  
  10. {  
  11. PyGILState_Release( state );  
  12. }  
  13. private:  
  14. PyGILState_STATE state;  
  15. };  


二、在主线程中,这样处理

// 初始化
Py_Initialize();
// 初始化线程支持
PyEval_InitThreads();
// 启动子线程前执行,为了释放PyEval_InitThreads获得的全局锁,否则子线程可能无法获取到全局锁。
PyEval_ReleaseThread(PyThreadState_Get());

// 其他的处理,如启动子线程等
......

// 保证子线程调用都结束后
PyGILState_Ensure();
Py_Finalize();
// 之后不能再调用任何python的API

以上就是对python多线程的详细介绍。希望对大家有所帮助。

评论关闭