使用多进程管理 Flask 应用可以提供更好的性能和稳定性,并确保服务器可以安全地关闭。本教程介绍如何使用多进程来启动和关闭 Flask 服务器。因werkzeug.server.shutdown
函数已经被弃用,不要再使用这个函数来关闭Flask服务器。
导入必要的模块
import multiprocessing
from flask import Flask, request
定义启动 Flask 应用的函数
def flask_app(q: multiprocessing.Queue) -> None:
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
app.run(host='localhost', port=80)
# 当从队列中接收到消息时,关闭服务器
try:
q.get_nowait()
func = request.environ.get('werkzeug.server.shutdown')
if func is None:
raise RuntimeError('Not running with the Werkzeug Server')
func()
except multiprocessing.QueueEmpty:
pass
启动多进程
if __name__ == "__main__":
q = multiprocessing.Queue()
p = multiprocessing.Process(target=flask_app, args=(q,))
p.start()
print("Flask server is running...")
发送关闭信号
当你想关闭 Flask 服务器时,向队列发送一个信号:
# 通过向队列发送消息来触发服务器关闭
q.put('shutdown')
p.join() # 等待子进程结束
print("Flask server has been shut down.")
注意:当你的Flask应用不是直接运行在操作系统的进程中,而是被部署在另一个Web服务器软件(如Gunicorn或uWSGI)的上时,可能需要借助这些Web服务器的信号机制,通过发送特定的信号来控制服务器的行为,如关闭操作等。