I'm using Flask as a REST endpoint which adds an application request to a queue. The queue is then consumed by a second thread.
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)
Is there a shutdown event handler in flask so that I can cleanly shutdown the consumer thread whenever the flask app is shutdown (like when the apache service is restarted)?
There is no
app.stop()
if that is what you are looking for, however using moduleatexit
you can do something similar:https://docs.python.org/2/library/atexit.html
Consider this:
Also of note-
atexit
will not be called if you force your server down using Ctrl-C.For that there is another module-
signal
.https://docs.python.org/2/library/signal.html