2024-10-01 22:41:50 发布
网友
据我所知,boost::python和boost::thread似乎不太喜欢对方。在
请参考http://pastebin.com/Cy123mJK
这是我在boost::python和boost::thread应用程序中遇到的问题的简化。在
如果有人能告诉我为什么会出现这些问题,我就不知道了,因为我严格地确保python交互是一次用一个线程完成的。在
在某个时候,程序会以一个segfault崩溃,原因并不明显。而且,也不可能赶上这次车祸看起来。。。在
非常感谢帮助!在
您正在Producer::run()和Consumer::run()中同时在多个线程中运行python。在
Producer::run()
Consumer::run()
确切地说,在锁定互斥体之前运行以下命令:
boost::python::object writer = this->k->Get<boost::python::object>("write");
也许你没有意识到,当你在Keeper::Get中调用boost::python::object::operator[](const std::string&)时,Boost最终调用了PyObject_GetItem。在锁定之后和使用返回函数之前,您需要将Get调用移动到正确的位置:
Keeper::Get
boost::python::object::operator[](const std::string&)
PyObject_GetItem
编辑:删除Py_Finalize()。是的,你是对的,boost.python不喜欢。在
Py_Finalize()
您正在
Producer::run()
和Consumer::run()
中同时在多个线程中运行python。在确切地说,在锁定互斥体之前运行以下命令:
也许你没有意识到,当你在
^{pr2}$Keeper::Get
中调用boost::python::object::operator[](const std::string&)
时,Boost最终调用了PyObject_GetItem
。在锁定之后和使用返回函数之前,您需要将Get调用移动到正确的位置:编辑:删除
Py_Finalize()
。是的,你是对的,boost.python不喜欢。在相关问题 更多 >
编程相关推荐