我需要使用boost::python
,但我希望解釋器上下文在python交互完成後被銷燬。boost.python解釋器實例
python解釋器如何以及何時被實例化,以及如何銷燬它所分配的所有資源?
更新顯然Py_Finalize
不是被設計成在同一過程中多次被調用。看來這種方法將不起作用:http://docs.python.org/2/c-api/init.html#l2h-652
我需要使用boost::python
,但我希望解釋器上下文在python交互完成後被銷燬。boost.python解釋器實例
python解釋器如何以及何時被實例化,以及如何銷燬它所分配的所有資源?
更新顯然Py_Finalize
不是被設計成在同一過程中多次被調用。看來這種方法將不起作用:http://docs.python.org/2/c-api/init.html#l2h-652
Py_Finalize設計爲每個進程只能調用一次。我處理它的方式是把它放到我們應用程序的關閉鉤子中,或者在主函數結束時運行它。你可以有多個解釋器上下文實例,當它們的「__main__」對象(由import(「__ main__」)創建的對象)被銷燬時,這些實例會被清除。
Boost.Python不支持安全呼叫Py_Finalize()
。
每Embedding - Getting started部分:
注意,在這個時候,你不能調用
Py_Finalize()
停止解釋。這可能會在未來版本的boost.python中修復。
其他細節在TODO中註明。簡而言之,一些內部的Boost.Python對象在Py_Finalize()
期間將保持活動狀態,並且僅在Boost.Python卸載時嘗試刪除,導致對象嘗試使用不存在的解釋器進行刪除。