我创建了一个Flask服务器,它将tensorflow作为服务运行。现在我想部署系统,并尝试在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
请求中都重新加载我的模型。我希望在服务器启动时预装我的模型。
知道吗??
我认为在第一次运行时,加载模型需要时间。然后它将继续使用全局,并且不会再次加载它。因此,解决方案是在启动apache服务器后调用api一次。