X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=src%2FPredictorWrapper.cpp;fp=src%2FPredictorWrapper.cpp;h=0943e98350b2df58015fd88b19470f4b24cbe3f1;hb=3ff9a5ad691b8dca9d91f8e9786a8d08d31b70fa;hp=8c5965f7e5845b16a266713954fb846b985e8521;hpb=48adce31a0ffdb3757ee1be8a63ce7e769e87deb;p=trackerpp.git diff --git a/src/PredictorWrapper.cpp b/src/PredictorWrapper.cpp index 8c5965f..0943e98 100644 --- a/src/PredictorWrapper.cpp +++ b/src/PredictorWrapper.cpp @@ -1,6 +1,8 @@ #include "PredictorWrapper.h" #include +#include "Logger.h" #include +#include namespace py = boost::python; @@ -11,15 +13,14 @@ using namespace suanzi; PredictorWrapperWPtr PredictorWrapper::instance; const static std::string PREDICTOR_PY_DIR = "./python"; +const static std::string TAG = "PredictorWrapper"; static std::string parse_python_exception(); PredictorWrapperPtr PredictorWrapper::create(const std::string& fname) { - //if (instance == nullptr){ if (instance.lock()){ - //instance = new PredictorWrapper(fname); return PredictorWrapperPtr(); } PredictorWrapperPtr ins (new PredictorWrapper(fname)); @@ -27,6 +28,32 @@ PredictorWrapperPtr PredictorWrapper::create(const std::string& fname) return ins; } +void PredictorWrapper::dump() +{ + LOG_DEBUG(TAG, "dump"); + std::string ss = ""; + try{ + py::object ret = this->dump_func(); + ss = py::extract(ret); + } catch (boost::python::error_already_set const &){ + std::string perror_str = parse_python_exception(); + LOG_ERROR(TAG, "Error in Python: " + perror_str) + } + LOG_DEBUG(TAG, ss); +} + +double PredictorWrapper::predict() +{ + LOG_DEBUG(TAG, "predict"); + try{ + this->predict_func(); + } catch (boost::python::error_already_set const &){ + std::string perror_str = parse_python_exception(); + LOG_ERROR(TAG, "Error in Python: " + perror_str) + } + return 0.1; +} + PredictorWrapper::PredictorWrapper(const std::string& fname) { Py_Initialize(); @@ -36,19 +63,16 @@ PredictorWrapper::PredictorWrapper(const std::string& fname) py::exec("import sys", main_namespace); std::string cmd = "sys.path.insert(0, '" + PREDICTOR_PY_DIR + "')"; py::exec(cmd.c_str(), main_namespace); - //py::exec("sys.path.insert(0, '/home/debian/project/tracker/python')", main_namespace); - //py::exec("sys.path.insert(0, './python')", main_namespace); + py::exec("import signal", main_namespace); + py::exec("signal.signal(signal.SIGINT, signal.SIG_DFL)", main_namespace); py::object predictor_mod = py::import("predictor"); py::object predictor_init = predictor_mod.attr("init"); dump_func = predictor_mod.attr("dump"); predict_func = predictor_mod.attr("predict"); - predictor_init(fname.c_str()); - //predictor_dump(); - //py::exec("import predictor", main_namespace); } catch (boost::python::error_already_set const &){ std::string perror_str = parse_python_exception(); - std::cout << "Error in Python: " << perror_str << std::endl; + LOG_ERROR(TAG, "Error in Python: " + perror_str) } }