Использование Pybind11 со сторонними модулями

У меня есть небольшой скрипт на Python, который несколько раз использует numpy для вычислений, и приложение Qt, которое вызывает скрипт с использованием pybind11. С помощьюpy::scoped_interpreter для управления временем жизни интерпретатора я могу запустить скрипт только один раз; при втором вызове приложения вылетает.

Здесь я нашел решение - управлять временем жизни переводчика вручную initialize_interpreter() / finalize_interpreter() пара может решить эту проблему, но не в моем случае. Теперь приложение запускает скрипт, возвращает результат и вылетает finalize_interpreter() линия. Удаление этой строки приводит к тому же поведению, что и использование py::scoped_interpreter, Вот используемый код:

//    py::scoped_interpreter guard{};/*crashes on second call if using numpy*/
py::initialize_interpreter();
py::module FullPow = py::module::import("FullPow");//importing module with script
const char* FilePath = filename.toStdString().c_str();
if (filename != ""){
    py::list result = FullPow.attr("PybindExample")(FilePath);
    vector<float> n = result.cast<vector<float>>();
    qDebug()<<n[1];}
py::finalize_interpreter();

Так есть ли способ использовать сторонние модули, такие как numpy, более одного раза? Буду благодарен за любые предложения!

0 ответов

Другие вопросы по тегам