2011-01-13 60 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