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 module atexit
you can do something similar:
https://docs.python.org/2/library/atexit.html
Consider this:
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()
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With