У меня есть приложение C++/Qt, в котором я запускаю сеанс интерпретатора Python в процессе основного приложения. Я создал «консоль Python» в виде виджета QPlainTextEdit, который обрабатывает ввод и вывод для интерпретатора с использованием API Python C. Смысл всего этого в том, что Python будет иметь прямой доступ к данным, которые я храню внутри основного приложения. Все хорошо, за исключением того, что я хочу иметь возможность завершить текущий сеанс интерпретатора и перезапустить его, не выходя из основного приложения.
Сейчас я пробую очевидный способ:
Код: Выделить всё
Py_Initialize();
// Run the main session...
Py_FinalizeEx();
// Restart the session
Py_Initialize();
Из прочтения других сообщений и документации Python могут возникнуть проблемы с перезагрузкой определенных модулей после завершения работы интерпретатора из-за утечек памяти. В моем случае это похоже на правду: повторный импорт определенных модулей (например, «numpy»), но не других (например, «sys») вызовет исключение и завершится ошибкой.
Есть ли хорошая стратегия обхода, чтобы перезапустить интерпретатор без этих проблем? Например, если я создам субинтерпретатор, возникнут ли при его завершении и перезапуске нового субинтерпретатора те же проблемы, что и у меня? Альтернатива, которой я пытался избежать, — это запуск Python вне процесса, что, я думаю, позволило бы мне перезапустить его, по сути убив процесс и запустив новый. Мы будем очень признательны за любые советы по стратегии.
Подробнее здесь:
https://stackoverflow.com/questions/784 ... thon-c-api