Использование Pybind11 со сторонними модулями - PullRequest
0 голосов
/ 22 октября 2018

У меня есть небольшой скрипт на 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, более одного раза?Буду благодарен за любые предложения!

...