我正在使用一个商业应用程序,它使用 Python 作为其脚本 API 的一部分。提供的功能之一是称为App.run()
. 当这个函数被调用时,它会启动一个新的 Java 进程来完成其余的执行。(不幸的是,我真的不知道它在幕后做了什么,因为提供的 Python 模块是.pyc
文件,并且许多 Python 函数是 SWIG 生成的)。
我遇到的麻烦是我正在将App.run()
调用构建到一个更大的 Python 应用程序中,该应用程序需要执行一些有保证的清理代码(关闭数据库等)。不幸的是,如果子进程被Ctrl+中断C,它会中止并返回命令行,而不会将控制权返回给 Python 主程序。因此,我的清理代码永远不会执行。
到目前为止,我已经尝试过:
- 用 atexit... 注册函数不起作用
- 将清理放在类
__del__
析构函数中......不起作用。(App.run()
在课堂内) - Ctrl在主 Python 应用程序中为+创建信号处理C程序...不起作用
- 放入
App.run()
线程...导致Ctrl+后出现内存错误C - 放入
App.run()
一个进程(来自多处理)......不起作用
任何想法可能会发生什么?