python—如何从C++;?
我有一个用python编写的模块。这个模块是我用Python实现的许多不同功能的接口: EmbeddingInterface.py只需导入此模块并创建一个实例: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
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);