スクリプトAPIの一部としてPythonを使用する商用アプリケーションを使用しています。提供される関数の1つは、と呼ばれるものApp.run()
です。この関数が呼び出されると、残りの実行を行う新しいJavaプロセスが開始されます。.pyc
(残念ながら、提供されているPythonモジュールはファイルであり、Python関数の多くはSWIGで生成されているため、内部で何が行われているのかはわかりません)。
私が抱えている問題はApp.run()
、保証されたクリーンアップコード(データベースを閉じるなど)を実行する必要がある、より大きなPythonアプリケーションに呼び出しを構築していることです。残念ながら、サブプロセスがCtrl+Cで中断された場合、サブプロセスは中止され、メインのPythonプログラムに制御を戻さずにコマンドラインに戻ります。したがって、クリーンアップコードは実行されません。
これまでに試しました:
- atexitに関数を登録しています...機能しません
- クラス
__del__
デストラクタにクリーンアップを入れても...機能しません。(App.run()
クラス内) - CtrlメインのPythonアプリで+のシグナルハンドラーを作成してCいます...機能しません
- スレッドを挿入すると... +
App.run()
の後にメモリ障害が発生しますCtrlC - (マルチプロセッシング
App.run()
からの)プロセスを入れる...機能しない
何が起こっているのか考えてみませんか?