tôi có ứng dụng này Flask đơn giản:Flask và Web.py cả treo trên atexit
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)
Module prolog_handler bắt đầu một phiên làm việc với một triplestore và tải một số quy tắc. Nó cũng có một chức năng atexit kết thúc phiên và in một thông báo như "Đóng ...". Tôi khởi động máy chủ từ dấu nhắc bash với python myapp.py
. Bất cứ khi nào tôi nhấn CTRL-C để dừng máy chủ, không có gì xảy ra. Tôi không được trả lại dấu nhắc bash, và tôi không thấy thông báo "Đóng ..." được in. Tôi cũng đã cố gắng làm điều này với Web.py với cùng một kết quả.
Các prolog_handler mà không là nghĩa đen đơn giản như này:
tstore = openPrologSession()
rules = ...
def cleanUp():
print "Closing..."
tstore.endSession()
atexit.register(cleanUp)
Vậy tại sao là nó quá khó để chỉ cần thực hiện một nhiệm vụ atexit?
PS: nếu tôi nhận xét tất cả nội dung về việc mở Phiên Prolog và kết thúc, và chỉ để lại phần in thông báo "Đóng ..." thì tôi thấy thông báo "Đang đóng ..." khi Tôi nhấn CTRL-C và tôi trở lại dấu nhắc bash. Điều đó hoạt động như mong đợi. Nhưng điểm bất lợi là gì nếu tôi không thể làm bất cứ điều gì hữu ích với nó?
Aha! Người đàn ông tuyệt vời, cảm ơn! –
@ John Peter Thompson Garcés: Cảm ơn. Kiểm tra xem điều này có phù hợp với bạn hay không. – pyfunc
Đúng, nó hoạt động như mong đợi! –