用线程增强python

用线程增强python,python,multithreading,boost,crash,Python,Multithreading,Boost,Crash,就我所知,boost::python和boost::thread似乎彼此并不喜欢 请参阅 这简化了我在基于boost::python和boost::thread的应用程序中遇到的问题 如果有人能告诉我为什么会出现这些问题;我不知道,因为我严格确保python交互一次只使用一个线程 在某些情况下,程序会因segfault(无明显原因)而崩溃。而且,要抓住这次坠机似乎是不可能的 非常感谢您的帮助 您在Producer::run()和Consumer::run()中同时在多个线程中运行python 确

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

请参阅

这简化了我在基于boost::python和boost::thread的应用程序中遇到的问题

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

在某些情况下,程序会因segfault(无明显原因)而崩溃。而且,要抓住这次坠机似乎是不可能的


非常感谢您的帮助

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

确切地说,在锁定互斥锁之前运行以下命令:

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

编辑:已删除
Py\u Finalize()
。是的,你是对的,boost.python不喜欢它。

嗨,谢谢你的回答。我已将你的建议纳入测试计划,目前正在运行。另外,boost::python文档声称不应该调用
Py_Finalize()
:测试程序自我上次发表评论以来一直在运行,没有中断。谢谢你发现了我的思维错误!
{
  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()));
}