Flask и Web.py зависают на atexit

У меня есть это простое приложение 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. Это работает, как и ожидалось. Но какой смысл в атексите, если я не могу сделать с ним ничего полезного?

5
задан John Peter Thompson Garcés 5 June 2012 в 14:56
поделиться