我正在使用一个商业应用程序,它使用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()
放入一个进程中(来自 multiprocessing)……不起作用