Python Flask shutdown event handler

Estoy usando Flask como un punto final REST que agrega una solicitud de aplicación a una cola. La cola es luego consumida por un segundo hilo.

server.py

 def get_application(): global app app.debug = True app.queue = client.Agent() app.queue.start() return app @app.route("/api/v1/test/", methods=["POST"]) def test(): if request.method == "POST": try: #add the request parameters to queue app.queue.add_to_queue(req) except Exception: return "All the parameters must be provided" , 400 return "", 200 return "Resource not found",404 

client.py

 class Agent(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.active = True self.queue = Queue.Queue(0) def run(self): while self.active: req = self.queue.get() #do something def add_to_queue(self,request): self.queue.put(request) 

¿Hay un controlador de eventos de apagado en el matraz para que pueda cerrar el hilo del consumidor de forma limpia cada vez que se cierre la aplicación del matraz (como cuando se reinicia el servicio de apache)?

    No hay app.stop () si eso es lo que está buscando, sin embargo, con el módulo atexit puede hacer algo similar:

    https://docs.python.org/2/library/atexit.html

    Considera esto:

     import atexit #defining function to run on shutdown def close_running_threads(): for thread in the_threads: thread.join() print "Threads complete, ready to finish" #Register the function to be called on exit atexit.register(close_running_threads) #start your process app.run() 

    También se debe tener en atexit que no se llamará atexit si fuerza su servidor hacia abajo usando Ctrl-C.

    Para eso hay otro módulo- signal .

    https://docs.python.org/2/library/signal.html