嵌入python并运行多次

时间:2012-04-18 09:44:15

标签: c++ python boost-python

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

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

它第一次运行得很好,但是当它再次运行时,我收到了这个错误:

  

LookupError:未知编码:utf8

并且代码没有按预期运行,任何帮助都表示赞赏。

1 个答案:

答案 0 :(得分:3)

由于你没有得到专家的回答,我提供了从学习类似问题的学习。 Python与reinitialization support存在问题。如果由于某些错误需要重新启动解释器,或者想要运行许多独立的解释器,这是很不幸的。

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

  

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

另一个问题是许多模块不能正确支持这一点,例如可以看到in this SO thread我认为这是您面临的问题。

似乎大多数Python应用程序都解决了这个问题:

  • 让引擎在专用流程中运行;
  • 使用代表不同执行状态(共同解释器)的subinterpreters

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