boost.python解释器实例化

时间:2013-11-02 15:27:08

标签: c++ boost-python

我需要使用boost::python,但我希望在python交互完成后销毁解释器上下文。

如何以及何时实例化python解释器,以及如何销毁它分配的所有资源?

更新显然Py_Finalize并非设计为在同一进程中多次调用。看来这种方法不起作用:http://docs.python.org/2/c-api/init.html#l2h-652

2 个答案:

答案 0 :(得分:0)

Py_Finalize旨在每个进程只调用一次。我处理它的方法是将它放入我们应用程序的关闭钩子中,或者在main函数的末尾运行它。您可以拥有解释器上下文的多个实例,并且当它们的“__main__”对象(由import(“__ main__”)创建的对象)被销毁时,它们会被清理。

答案 1 :(得分:0)

Boost.Python不支持安全地调用Py_Finalize()

根据Embedding - Getting started部分:

  

请注意,此时您不得致电Py_Finalize()来停止翻译。这可以在boost.python的未来版本中修复。

TODO中注明了其他详细信息。简而言之,一些内部Boost.Python对象将在Py_Finalize()期间保持活动状态,并且仅在Boost.Python卸载时尝试删除,从而导致对象尝试使用不存在的解释器进行删除。