我正在將Python嵌入到我們的測試套件應用程序中。目的是使用Python運行多個測試腳本來收集數據並生成測試報告。一次測試運行的多個測試腳本可以創建可在下一個腳本中使用的全局變量和函數。如何重新初始化嵌入式Python解釋器?
該應用程序還提供了在嵌入式解釋器中導入的擴展模塊,用於與應用程序交換一些數據。
但用戶也可以進行多次測試運行。我不想在多次測試運行之間共享這些全局變量,導入和交換數據。我必須確保在真正的狀態下重新啓動以控制測試環境並獲得相同的結果。
我應該如何重新初始化解釋器?
我使用了Py_Initialize()和Py_Finalize(),但是在第二次初始化我提供給解釋器的擴展模塊時得到第二次運行的異常。 和文檔warns against using it more than once。
使用sub-interpreters似乎有與擴展模塊初始化相同的警告。
我懷疑我的擴展模塊的初始化出了問題,但我擔心同樣的問題會發生在第三方擴展模塊上。
也許可以通過在自己的進程中啓動解釋器來使其工作,以確保釋放所有內存。
順便說一句,我使用boost-python,它也警告反對使用Py_Finalize!
有什麼建議嗎?
感謝
所以基本上,我應該實例化一次我的Python解釋器,並使用此解釋器來啓動子解釋器,它們都擁有自己的名稱空間? 看起來像一個可行的解決方案,如果這些子解釋器沒有受到與Py_NewInterpreter所做的相同的警告。 我會仔細研究一下,並試驗一下。謝謝! – nab
你明白了。 InstInciating InteractiveInterpreter爲您提供全新的環境。我不確定關於從父解釋器繼承的內容的規則是什麼,但這應該很容易控制。 –
似乎正在做我想做的事。請注意,它與模塊初始化有相同的缺點(它們只是初始化一次)。但它清理命名空間很有效。謝謝! – nab