Flask部署到Waitress后仍存在首请求慢的懒加载问题
解决Waitress部署Flask后首请求慢的懒加载问题
你遇到的首请求缓慢、后续请求正常的问题,根源并不是Waitress的懒加载模式,而是你的模型资源仍在首次请求时才完成加载——Waitress只是替换了Flask自带的开发服务器,但不会自动改变你代码里资源加载的时机。
具体解决方案:
- 提前加载核心资源:将模型加载逻辑从路由处理函数中移到全局初始化阶段,也就是在创建Flask应用之后、定义路由之前执行。这样服务启动时就会预先加载好模型,避免首请求时的加载耗时。
修改后的代码示例:
import flask import io import string import time import os from flask import Flask, jsonify, request import load_model import prepare_image from flask_cors import CORS from waitress import serve from paste.translogger import TransLogger app = Flask(__name__) # 控制文件大小不超过16MB app.config['MAX_CONTENT_LENGTH'] = 4096 * 4096 cors = CORS(app, resources={r"/*": {"origins": "*"}}) # 关键:在服务启动时提前加载模型 # 根据你的load_model模块实际情况,调用对应的加载函数 model = load_model.load() print("模型加载完成,服务已就绪") @app.route('/predict', methods=['POST']) def predict(): # 直接使用已加载好的model处理请求,无需再次加载 # 替换成你的实际处理逻辑 file = request.files.get('image') image_data = prepare_image.process(file) prediction = model.predict(image_data) return jsonify({"prediction": prediction}) if __name__ == '__main__': serve(TransLogger(app, setup_console_handler=False), port=5000)
确保加载逻辑的唯一性:如果
load_model模块中的加载函数没有做重复加载判断,建议添加单例逻辑或全局标记,避免重复初始化资源。启动时验证加载状态:通过打印日志或其他方式,确认服务启动阶段已完成模型加载,这样就能直观判断首请求慢的问题是否解决。
内容的提问来源于stack exchange,提问作者Michel Rivas
相关产品推荐
相关产品推荐

