我是否必须在同一范围内调用 py::initialize_interpreter() 和 py::finalize_interpreter() ?

问题描述

我正在尝试将 Python 脚本嵌入到我的 C++ 应用程序中。 我想知道是否必须在同一范围内调用 py::initialize_interpreter()py::finalize_interpreter(),如下所示。

if(condition){
   py::initialize_interpreter();
   {
       other pybind processes
   }
   py::finalize_interpreter();
}

或者我可以这样做:

if(condition){
   py::initialize_interpreter();
}
 /*** other C++ code***/

if(condition){
   other pybind processes
}

/*** other C++ code***/
if(condition){
   py::finalize_interpreter();
}

这行得通吗?

谢谢!

解决方法

不,您不需要在相同的范围内调用它,但是您需要注意,一旦 py::initialize_interpreter(); 被初始化,您就可以再次调用它。要再次调用它,您首先需要调用 py::finalize_interpreter();