【问题标题】:boost python with threads用线程提升python
【发布时间】:2011-06-08 18:50:09
【问题描述】:

据我所知,似乎 boost::python 和 boost::thread 并不真正喜欢对方。

请参考http://pastebin.com/Cy123mJK

这是对我的 boost::python 和基于 boost::thread 的应用程序的问题的简化。

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

在某些时候,程序无缘无故地因段错误而崩溃。另外,这次崩溃似乎是不可能的……

非常感谢您的帮助!

【问题讨论】:

    标签: python multithreading boost crash


    【解决方案1】:

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

    确切地说,是在锁定互斥体之前运行它:

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

    也许你没有意识到,当你在Keeper::Get 中调用boost::python::object::operator[](const std::string&amp;) 时,Boost 最终会调用PyObject_GetItem。在锁定之后和使用返回的函数之前,您需要将该 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 不喜欢它。

    【讨论】:

    • 您好,感谢您的回答。我已将您的建议纳入测试程序,目前正在运行。此外,不应调用 boost::python 文档声明 Py_Finalize()ur1.ca/2zuwb
    • 自我上次发表评论以来,测试程序一直在运行,没有中断。感谢您发现我的思维错误!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 2012-01-08
    • 1970-01-01
    • 2018-07-03
    • 2011-06-18
    • 2012-05-16
    相关资源
    最近更新 更多