2011-02-13 34 views
0

我有一個python程序調用到一個C++庫,它希望釋放所有的python鎖,以便其他python線程可以運行。主python線程的PyThreadState *是否應該爲NULL?

使用PyEval_SaveThreadPyEval_ReleaseThread我得到的錯誤,線程狀態是NULL:

Fatal Python error: PyEval_SaveThread: NULL tstate 

然而,較低級別的功能似乎接受興高采烈地空狀態:

PyThreadState *s; 
s = PyThreadState_Swap(NULL); 
// (now s = 0) 
PyEval_ReleaseLock(); 

// .... 

PyEval_AcquireLock(); 
PyThreadState_Swap(s); 

// everything seems to be just fine :) 

回答

2

答:沒有,它從來沒有被認爲是NULL(如果是的話,這是一個致命的錯誤)。原來,這是因爲我正在通過boost_python鏈接兩個不同版本的python,另一個直接鏈接。

頂部提示: 使用lddotool -L檢查你函數庫的依賴時,有趣的事情發生;)

相關問題