嵌入 python 并运行多次

Embedding python and running for multiple times

本文关键字:运行 python 嵌入      更新时间:2023-10-16

我正在使用boost::p ython嵌入python,这是我这样做的:

void runCode(){
    Py_Initialize();
    //boost::python code goes here and embedded python code runs
    Py_Finalize();
}

第一次运行良好,但是当它再次运行时,我收到此错误:

查找错误: 未知编码: utf8

并且代码未按预期运行,感谢任何帮助。

由于您没有得到专家的答案,因此我提供从处理类似问题中学到的知识。Python 在重新初始化支持方面存在问题。如果您由于某些错误而需要重新启动解释器,或者想要运行许多独立的解释器,这是不幸的。

一个问题是泄漏资源和内存(引用上面的链接):

错误和注意事项:动态加载的扩展模块由 Python 不会卸载。分配的少量内存 Python 解释器可能无法释放(如果发现泄漏,请报告 它)。内存被绑定在对象之间的循环引用中不是 释放。扩展模块分配的某些内存可能无法释放。 如果某些扩展的初始化例程,则可能无法正常工作 被调用不止一次;如果应用程序调用,则可能会发生这种情况 Py_Initialize() 和 Py_Finalize() 不止一次。

另一个问题是许多模块不能正确支持此功能,例如在此 SO 线程中可以看到。我认为这就是你面临的问题。

似乎大多数 Python 应用程序都可以解决此问题:

  • 通过让发动机在专用过程中运行;
  • 通过使用表示(公共解释器的)不同执行状态的子解释器

如果第二个适合您,请继续。