Я использую коммерческое приложение, которое использует Python как часть его скриптового API. Одна из предоставляемых функций - это что-то вроде App.run()
. Когда эта функция вызывается, она запускает новый Java-процесс, который выполняет оставшуюся часть выполнения. (К сожалению, я не знаю, что он делает под капотом, поскольку поставляемые модули Python являются .pyc
файлами, а многие из функций Python сгенерированы SWIG).
Проблема, с которой я столкнулась, заключается в том, что я создаю вызов App.run()
в более крупное приложение Python, которое должно выполнить некоторый гарантированный код очистки (закрытие базы данных и т.д.). К сожалению, если подпроцесс прерван с помощью Ctrl + C, он прерывается и возвращается в командную строку, не возвращая управление основной программе Python. Таким образом, мой код очистки никогда не выполняется.
До сих пор я пробовал:
- Регистрация функции с atexit... не работает
- Помещение очистки в класс
__del__
destructor... не работает. (App.run()
находится внутри класса) - Создание обработчика сигнала для Ctrl + C в основном приложении Python... не работает
- Помещение
App.run()
в поток... приводит к ошибке памяти после Ctrl + C - Ввод
App.run()
в процесс (из многопроцессорной обработки)... не работает
Любые идеи, что может произойти?