我有一个C++/Qt应用程序,其中我正在主应用程序的进程中运行Python解释器会话.我构建了一个作为QPlainTextEdit
小部件的"Python控制台",它使用Python C API处理解释器的输入和输出.所有这一切的重点是,Python将可以直接访问我在主应用程序中保存的数据.一切都很好,只是我希望能够结束当前的解释器会话并在不退出主应用程序的情况下重新启动它.
目前,我正在try 显而易见的方法:
Py_Initialize();
// Run the main session...
Py_FinalizeEx();
// Restart the session
Py_Initialize();
从阅读其他帖子和Python的文档来看,由于内存泄漏,在最终确定解释器后重新加载某些模块可能会出现问题.在我的 case 中似乎是正确的:重新导入某些模块(例如"numpy"),但其他模块(例如"sys")不会触发异常并失败.
是否有一个好的变通策略可以在没有这些问题的情况下重新启动解释器?例如,如果我产生一个子解释器,那么最终确定它并重新启动新的子解释器是否会遇到与我遇到的相同的问题?我试图避免的替代方案是在进程外运行Python,我认为这将允许我通过基本上杀死进程并启动新进程来重新启动.任何策略建议都将不胜感激.