python—如何从C++;?

python—如何从C++;?,python,c++,multithreading,c++11,boost-python,Python,C++,Multithreading,C++11,Boost Python,我有一个用python编写的模块。这个模块是我用Python实现的许多不同功能的接口: EmbeddingInterface.py只需导入此模块并创建一个实例: import CPPController cppControllerInstance = CPPController() 我想在C++中使用CPPFrimeRebug实例。这就是我到目前为止所做的: #include <Python.h> #include <boost\python.hpp> using

我有一个用python编写的模块。这个模块是我用Python实现的许多不同功能的接口:

EmbeddingInterface.py只需导入此模块并创建一个实例:

import CPPController

cppControllerInstance = CPPController()

我想在C++中使用CPPFrimeRebug实例。这就是我到目前为止所做的:

#include <Python.h>
#include <boost\python.hpp>

using namespace boost;

python::object createController()
{
    try
    {
        Py_Initialize();

        python::object mainModule = python::import("__main__");
        python::object mainNamespace = mainModule.attr("__dict__");

        python::dict locals;

        python::exec(
            "print \"loading python implementetion:\"\n"
            "import sys\n"
            "sys.path.insert(0, \"C:\\Projects\\Python\\ProjectName\\Panda\")\n"
            "import EmbeddingInterface\n"
            "controller = EmbeddingInterface.cppControllerInstance\n",
            mainNamespace, locals);

            python::object controller = locals["controller"];
            return controller;
    }
    catch(...) {}
}
我试图用自己的线程调用python函数“loadScene”,但该函数似乎被阻塞了。它永远不会回来


这样做的正确方式是什么?

似乎您误解了

一段测试代码:

#include <iostream>
#include <chrono>
#include <thread>
#include <future>

int doSomething(){
  std::cout << "do something"<<std::endl;
  return 1;
}

int main(){
   auto f = std::async(doSomething);

   std::this_thread::sleep_for(std::chrono::seconds(3));
   std::cout <<"wait a while"<<std::endl;
   f.get();
   return 0;
}
换线

auto f = std::async(doSomething);

然后输出:

do something
wait a while
例如,要在另一个线程中立即运行它,您可以尝试:

std::async(std::launch::async,loadScene);

事实上,当时我并不了解std::async的行为以及std::future析构函数阻塞的事实。但是,关于在不同的C++线程上调用Python函数,它不像您所说明的那样简单,需要用吉尔(Python Global Delpter Clood)来操作。
auto f = std::async(std::launch::async,doSomething);
do something
wait a while
std::async(std::launch::async,loadScene);