gpt4 book ai didi

python - 用线程 boost python

转载 作者:太空宇宙 更新时间:2023-11-03 13:52:29 25 4
gpt4 key购买 nike

据我所知,boost::python 和 boost::thread 似乎彼此并不喜欢。

请引用http://pastebin.com/Cy123mJK

这是我在使用基于 boost::python 和 boost::thread 的应用程序时遇到的问题的简化。

如果有人能告诉我为什么会出现这些问题;我一无所知,因为我严格确保 python 交互一次与一个线程完成。

有时,程序会无缘无故地因段错误而崩溃。此外,似乎无法捕捉到这次崩溃......

非常感谢帮助!

最佳答案

您在 Producer::run()Consumer::run() 中同时在多个线程中运行 python。

准确地说,您在锁定互斥量之前运行此命令:

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

也许你没有意识到,当你调用 boost::python::object::operator[](const std::string&) 时,Boost 最终会调用 PyObject_GetItemKeeper::Get 中。在锁定之后和使用返回的函数之前,您需要将该 Get-call 移动到正确的位置:

{
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 不喜欢它。

关于python - 用线程 boost python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4685216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com