3

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

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

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

LookupError:未知编码:utf8

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

4

1 回答 1

3

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

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

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

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

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

如果第二个对您有用,请继续。

于 2012-04-23T08:33:05.447 回答