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