2011-01-13 58 views
3

看來boost :: python和boost :: thread並不是真的很喜歡對方,因爲我可以說。用線程提升python

請參考http://pastebin.com/Cy123mJK

這是我與我的boost ::有蟒蛇和boost ::基於線程的應用程序中的問題簡單化。

如果有人能告訴我爲什麼會出現這些問題;我不知道,因爲我嚴格確保python交互一次完成一個線程。

在某些情況下,程序崩潰時會出現段錯誤,原因不明。此外,它似乎不可能趕上這次崩潰...

幫助非常感謝!

回答

6

您在​​和Consumer::run()的同一時間在多個線程中運行python。

確切的說,你鎖定互斥之前運行此:

boost::python::object writer = this->k->Get<boost::python::object>("write"); 

也許當你在Keeper::Getboost::python::object::operator[](const std::string&)你沒有意識到,升壓最終調用PyObject_GetItem。你需要移動獲取呼叫到正確的位置,鎖定後使用返回功能之前:

{ 
    boost::mutex::scoped_lock l(this->k->python_keeper); 
    boost::python::object writer = this->k->Get<boost::python::object>("write"); 
    writer(boost::python::str(os.str())); 
} 

編輯:刪除Py_Finalize()。是的你是對的,boost.python不喜歡它。

+0

嗨,謝謝你的回答。我已將您的建議納入測試計劃,目前正在運行。另外,不應該調用boost :: python文檔聲明`Py_Finalize()`:http://ur1.ca/2zuwb – cpf 2011-01-24 07:16:14