【发布时间】:2021-06-24 10:46:49
【问题描述】:
我创建了一个将 tensorflow 作为服务运行的 Flask 服务器。现在我想部署系统,我尝试在 apache2 中使用 mod_wsgi。 apache2中Flask服务器的设置效果很好。
在我的 Flask 服务器的第一版中,我使用 if __name__ == '__main__': 预加载了 tensorflow 模型。像这样:
my_app.py
import sys
sys.path.insert(0, "/var/www/python_servers/theserver")
import tensorflow as tf
from flask import Flask
app = Flask(__name__)
the_model = None
model_path = 'nn/mymodel'
def load_model():
global the_model
the_model = tf.keras.models.load_model(model_path)
def prepare_image(image, target):
if image.mode != "RGB":
image = image.convert("RGB")
image = image.resize(target)
image = img_to_array(image)
image = np.expand_dims(image, axis=0)
image /= 255.
return image
@app.route("/predict", methods=["POST"])
def predict():
if flask.request.method == "POST":
if flask.request.files.get("file"):
# read the image in PIL format
image = flask.request.files["file"].read()
image = Image.open(io.BytesIO(image))
image = prepare_image(image, target=(299, 299))
preds = predict_gretaste_dataset(image1)
return flask.jsonify(preds)
if __name__ == "__main__":
load_model()
app.run(debug=True, use_debugger=False, use_reloader=False, host='0.0.0.0')
现在(在 mod_wsgi 下)我创建了一个这样的 .wsgi 文件:
my_server.wsgi
#!/user/bin/python
import sys
sys.path.insert(0, "/var/www/python_servers/gretaste")
from my_app import app as application
问题是像上面的例子(mod_wsgi)一样if __name__ == '__main__':下的代码它没有在服务器启动时执行,以便预加载我的模型并为POST请求做好准备。
我不想在每个POST 请求中重新加载我的模型。我希望在服务器启动时预加载我的模型。
有什么想法吗??
【问题讨论】:
标签: python tensorflow flask flask-restful