python多線程應(yīng)用中的詳細(xì)介紹
python多線程在應(yīng)用的時(shí)候有不少的事情需要重點(diǎn)的注意。其實(shí)只要掌握這些相關(guān)的技術(shù)段就能保證這個(gè)應(yīng)用的完整。下面我們來看看具體是需要如何進(jìn)行操作。
今天看了近一天關(guān)于多線程的應(yīng)用中,如何安全調(diào)用python多線程方面的資料,開始的時(shí)候看的簡直頭大如斗,被python語言的全局鎖(Global Interpreter Lock)、線程狀態(tài)(Thread State )等都有點(diǎn)繞暈了,后來經(jīng)過各方面文章和幫助文檔的相互參考,發(fā)現(xiàn)對于2.4/2.5版本,提供了PyGILState_Ensure, PyGILState_Release,哎,這下可方便大發(fā)了。
一、首先定義一個(gè)封裝類,主要是保證PyGILState_Ensure, PyGILState_Release配對使用,而且這個(gè)類是可以嵌套使用的。
- #include <python.h>
- class PyThreadStateLock
- {
- public:
- PyThreadStateLock(void)
- {
- state = PyGILState_Ensure( );
- }
- ~PyThreadStateLock(void)
- {
- PyGILState_Release( state );
- }
- private:
- PyGILState_STATE state;
- };
二、在主線程中,這樣處理
// 初始化
Py_Initialize();
// 初始化線程支持
PyEval_InitThreads();
// 啟動子線程前執(zhí)行,為了釋放PyEval_InitThreads獲得的全局鎖,否則子線程可能無法獲取到全局鎖。
PyEval_ReleaseThread(PyThreadState_Get());
// 其他的處理,如啟動子線程等
......
// 保證子線程調(diào)用都結(jié)束后
PyGILState_Ensure();
Py_Finalize();
// 之后不能再調(diào)用任何python的API
以上就是對python多線程的詳細(xì)介紹。希望對大家有所幫助。
【編輯推薦】