0

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

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

Update显然Py_Finalize不是为了在同一进程中多次调用而设计的。看来这种方法行不通:http ://docs.python.org/2/c-api/init.html#l2h-652

4

2 回答 2

0

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

根据嵌入 - 入门部分:

请注意,此时您绝不能调用Py_Finalize()停止解释器。这可能会在 boost.python 的未来版本中得到修复。

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

于 2013-11-04T15:01:35.263 回答
0

Py_Finalize 设计为每个进程仅调用一次。我处理它的方式是把它放到我们应用程序的关闭钩子中,或者在主函数的末尾运行它。您可以有多个解释器上下文实例,当它们的“__main__”对象(由 import("__main__") 创建的那个)被销毁时,这些实例会被清理。

于 2013-11-03T01:04:44.627 回答