Ich habe diese einfache Flasche App:Flasche und Web.py hängen beide auf 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)
Das prolog_handler Modul eine Sitzung mit einem triplestore gestartet und lädt einige Regeln. Es hat auch eine atexit-Funktion, die die Sitzung beendet und eine Nachricht wie "Schließen ..." ausgibt. Ich starte den Server von der Bash-Eingabeaufforderung mit python myapp.py
. Immer wenn ich STRG-C drücke, um den Server zu stoppen, passiert nichts. Ich werde nicht zur Bash-Eingabeaufforderung zurückgeleitet, und ich sehe nicht, dass die Meldung "Closing ..." gedruckt wird. Ich habe auch versucht, dies mit Web.py mit den gleichen Ergebnissen zu tun.
Der dass prolog_handler tut, ist buchstäblich so einfach wie diese:
tstore = openPrologSession()
rules = ...
def cleanUp():
print "Closing..."
tstore.endSession()
atexit.register(cleanUp)
Warum ist es so schwierig, nur eine atexit Aufgabe ausführen?
PS: wenn ich alle Sachen über das Öffnen der Prolog Session auskommentiere und sie beende, und einfach den Teil zurücklassen, der die Nachricht "Closing ..." ausgibt, dann sehe ich die Meldung "Closing ..." wenn Ich drücke STRG-C und ich komme zur Bash-Eingabeaufforderung zurück. Das funktioniert wie erwartet. Aber was ist der Sinn von Atexit, wenn ich damit nichts anfangen kann?
Aha! Cooler Mann, danke! –
@John Peter Thompson Garcés: Danke. Überprüfen Sie, ob dies für Sie funktioniert. – pyfunc
Ja, es hat wie erwartet funktioniert! –