我使用Flask作为REST端点,该端点将应用程序请求添加到队列中。然后,该队列被第二个线程使用。
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)
flask中是否有关闭事件处理程序,以便每当烧瓶应用程序关闭时(例如重新启动apache服务时),我就可以干净地关闭使用者线程?
如果你要查找的是没有app.stop(),但是使用模块atexit可以执行类似的操作:
atexit
https://docs.python.org/2/library/atexit.html
考虑一下:
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()
另外,atexit如果你使用Ctrl-C强制关闭服务器,则不会调用。
Ctrl-C
为此,还有另一个模块- signal。
signal