私はこのシンプルなFlaskアプリを持っています:
from flask import Flask
import prolog_handler as p
app = Flask(__name__)
app.debug = False
@app.route('/')
def hello():
for rule in p.rules:
print rule
return 'hello'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)
prolog_handlerモジュールは、トリプルストアとのセッションを開始し、いくつかのルールをロードします。また、セッションを終了し、「Closing...」のようなメッセージを出力するatexit関数もあります。を使用してbashプロンプトからサーバーを起動しますpython myapp.py
。CTRL-Cを押してサーバーを停止しても、何も起こりません。bashプロンプトに戻らず、「Closing...」メッセージが出力されません。Web.pyでもこれを実行しようとしましたが、同じ結果になりました。
prolog_handlerが行うことは、文字通り次のように単純です。
tstore = openPrologSession()
rules = ...
def cleanUp():
print "Closing..."
tstore.endSession()
atexit.register(cleanUp)
では、なぜatexitタスクを実行するのがそれほど難しいのでしょうか。
PS:プロローグセッションを開いて終了することに関するすべてのことをコメントアウトし、「Closing ...」というメッセージを出力する部分を残すと、CTRL-を押すと「Closing...」メッセージが表示されます。 Cと私はbashプロンプトに戻ります。それは期待どおりに機能します。しかし、私がそれで有用なことを何もできない場合、atexitのポイントは何ですか?