refactor importClass and valgrind

This commit is contained in:
2023-11-12 00:02:49 +01:00
parent a3bf97e501
commit c7372b7fc7
9 changed files with 1596906 additions and 44 deletions

View File

@@ -37,27 +37,25 @@ namespace pywrap {
}
void PyWrap::importClass(const clfId_t id, const std::string& moduleName, const std::string& className)
{
std::lock_guard<std::mutex> lock(mutex);
auto result = moduleClassMap.find(id);
if (result != moduleClassMap.end()) {
return;
}
CPyObject module = PyImport_ImportModule(moduleName.c_str());
std::cout << "1a" << std::endl;
PyObject* module = PyImport_ImportModule(moduleName.c_str());
if (PyErr_Occurred()) {
errorAbort("Couldn't import module " + moduleName);
}
CPyObject classObject = PyObject_GetAttrString(module, className.c_str());
PyObject* classObject = PyObject_GetAttrString(module, className.c_str());
if (PyErr_Occurred()) {
errorAbort("Couldn't find class " + className);
}
CPyObject instance = PyObject_CallObject(classObject, NULL);
PyObject* instance = PyObject_CallObject(classObject, NULL);
if (PyErr_Occurred()) {
errorAbort("Couldn't create instance of class " + className);
}
std::lock_guard<std::mutex> lock(mutex);
module.AddRef();
classObject.AddRef();
instance.AddRef();
moduleClassMap.insert({ id, { module.getObject(), classObject.getObject(), instance.getObject() } });
moduleClassMap.insert({ id, { module, classObject, instance } });
}
void PyWrap::clean(const clfId_t id)
{

View File

@@ -1,5 +1,15 @@
#include "XGBoost.h"
See https ://stackoverflow.com/questions/36071672/using-xgboost-in-c
namespace pywrap {
std::string XGBoost::version()
{