2012-06-05 35 views
5

mam tę prostą aplikację kolby:kolby i Web.py zarówno powiesić na 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) 

Moduł prolog_handler rozpoczyna sesję z triplestore i obciążeń pewne zasady. Ma także funkcję atexit, która kończy sesję i wyświetla komunikat podobny do "Zamykanie ...". Uruchomiłem serwer z podpowiedzi bash pod numerem python myapp.py. Ilekroć trafiam CTRL-C, aby zatrzymać serwer, nic się nie dzieje. Nie wrócę do znaku zachęty bash i nie widzę komunikatu "Zamykanie ...". Próbowałem również zrobić to z Web.py z tymi samymi wynikami.

że prolog_handler robi to dosłownie tak proste, jak to:

tstore = openPrologSession() 
rules = ... 

def cleanUp(): 
    print "Closing..." 
    tstore.endSession() 

atexit.register(cleanUp) 

Więc dlaczego jest tak trudno po prostu wykonać zadanie atexit?

PS: jeśli skomentuję wszystkie rzeczy związane z otwarciem sesji Prologu i kończę je, i po prostu opuść część, która drukuje komunikat "Zamykanie ...", widzę komunikat "Zamykanie ...", gdy Wcisnąłem CTRL-C i wróciłem do zachęty bash. To działa zgodnie z oczekiwaniami. Ale jaki jest sens ateita, jeśli nie mogę zrobić z nim nic użytecznego?

Odpowiedz

6

To nie może być doskonałą odpowiedzią, ale starałem się używać następujących dla Kolby:

# These functions should be called when you tear down the application 
app.teardown_functions = [] 

def teardown_applications(): 
    for func in app.teardown_functions: 
     print('Calling teardown function %s' % func.__name__) 
     func() 

app.teardown_functions.append(function_tocall_at_exit) 

To wydaje się działać dla mnie. Zwykle używam również geowłókniny do wszystkich zastosowań w kolbach. Ta opcja zwykle działa dla mnie.

Niektóre z importu modułów:

from flask import Flask 
from gevent.wsgi import WSGIServer 
import gevent 
import signal 

from gevent import monkey 
monkey.patch_all() 
+0

Aha! Fajny człowiek, dzięki! –

+0

@John Peter Thompson Garcés: Dzięki. Sprawdź, czy to działa dla Ciebie. – pyfunc

+0

Tak, działało zgodnie z oczekiwaniami! –