У меня есть это простое приложение 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 _запускает сеанс с тройным хранилищем и загружает некоторые правила. Он также имеет функцию atexit, которая завершает сеанс и печатает сообщение типа «Закрытие…». Я запускаю сервер из командной строки bash с помощью python myapp.py
. Всякий раз, когда я нажимаю CTRL -C, чтобы остановить сервер, ничего не происходит. Я не возвращаюсь к командной строке bash и не вижу распечатанного сообщения «Закрытие...». Я также пытался сделать это с помощью Web.py с теми же результатами.
То, что делает обработчик пролога _, буквально так же просто, как это:
tstore = openPrologSession()
rules =...
def cleanUp():
print "Closing..."
tstore.endSession()
atexit.register(cleanUp)
Так почему же так сложно просто выполнить задачу atexit?
PS :если я закомментирую все, что связано с открытием сеанса Prolog и его завершением, и просто оставлю часть, которая печатает сообщение "Закрытие...", тогда я увижу сообщение "Закрытие...", когда нажму CTRL -C, и я возвращаюсь к командной строке bash. Это работает, как и ожидалось. Но какой смысл в атексите, если я не могу сделать с ним ничего полезного?