在单独的线程中将boost::python::object作为函数调用 我试图在Boosi::Python的帮助下,将一些C++功能封装到Python中。我在使用特定的回调机制时遇到了一些问题。以下代码片段解释了我正在尝试执行的操作: //c++ side class LoopClass { public: //some class attributes void call_once(std::function const& fun) const; }; void callOnce(LoopClass& loop, boost::python::object const& function) { auto fun = [&]() { function(); }; loop->call_once(fun); } boost::python::class_<LoopClass>("LoopClass") .def("call_once", &callOnce); //python side def foo(): print "foo" loop = LoopClass() loop.call_once(foo)

在单独的线程中将boost::python::object作为函数调用 我试图在Boosi::Python的帮助下,将一些C++功能封装到Python中。我在使用特定的回调机制时遇到了一些问题。以下代码片段解释了我正在尝试执行的操作: //c++ side class LoopClass { public: //some class attributes void call_once(std::function const& fun) const; }; void callOnce(LoopClass& loop, boost::python::object const& function) { auto fun = [&]() { function(); }; loop->call_once(fun); } boost::python::class_<LoopClass>("LoopClass") .def("call_once", &callOnce); //python side def foo(): print "foo" loop = LoopClass() loop.call_once(foo),c++,python,multithreading,boost,C++,Python,Multithreading,Boost,这不管用。我是错过了什么还是太傻了?你打电话给PyEval_InitThreads()了吗 如果是这样的话,也许这篇文章能有所帮助?请看。@JanneKarila谢谢你的回复!我更新了我的帖子并添加了我试图使用的代码。 void callOnce(LoopClass& loop, boost::python::object const& function) { auto fun = [&]() { PyGILState_STATE gstate;

这不管用。我是错过了什么还是太傻了?

你打电话给PyEval_InitThreads()了吗


如果是这样的话,也许这篇文章能有所帮助?

请看。@JanneKarila谢谢你的回复!我更新了我的帖子并添加了我试图使用的代码。
void callOnce(LoopClass& loop, boost::python::object const& function) {

    auto fun = [&]() {
        PyGILState_STATE gstate;
        gstate = PyGILState_Ensure();

        function();

        PyGILState_Release(gstate);
    };

    loop->call_once(fun);
}