用线程来提升python

cpf*_*cpf 3 python crash multithreading boost

似乎boost :: python和boost :: thread并不是真的很喜欢彼此.

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

这是我使用boost :: python和boost :: thread-based应用程序时遇到的问题的简化.

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

在某些时候,程序崩溃与段错误没有明显的原因.而且,似乎不可能抓住这次崩溃......

非常感谢!

Ton*_*ttu 6

你是在同时运行多个线程蟒蛇Producer::run()Consumer::run().

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

boost::python::object writer = this->k->Get<boost::python::object>("write");
Run Code Online (Sandbox Code Playgroud)

也许你没有意识到,升压最终调用PyObject_GetItem,当你调用boost::python::object::operator[](const std::string&)Keeper::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()));
}
Run Code Online (Sandbox Code Playgroud)

编辑:删除Py_Finalize().是的你是对的,boost.python不喜欢它.