gpt4 book ai didi

python - flask 应用程序通过 Uwsgi 和 Nginx 给出 504 超时?

转载 作者:行者123 更新时间:2023-11-28 19:03:54 24 4
gpt4 key购买 nike

我正在尝试部署我的 keras 模型。它在端口 5000 上与 flask 一起工作正常,当我尝试通过此命令 uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi:app 测试通过 Uwsgi 提供服务时,它给了我想要的结果。当我尝试配置一个单独的 Uwsgi fie 然后一个 Nginx 配置以使部署运行更长时间以便它可以通过 nginx 通过多个端口提供服务时,问题就出现了。当我运行这个 url 时,它给了我一个 504 超时错误

http://35.230.90.108/predict/ethnicity?auth_token=WyIxYSDFg467YT.A3MmJlODcyODkzOGQzZjk4YzUiXQ.B5e5SgsDcaMgiRqx21Ydf8M&url=https://thumb7.shutterstock.com/display_pic_with_logo/768073/110309945/stock-photo-portrait-of- smiling-young-black-man-in-the-interior-of-coffee-shop-110309945.jpg

我正在使用本教程进行部署:

https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-16-04

这里是部署文件、nginx配置和Uwsgi配置的代码。

部署文件

import dlib
import requests
import numpy as np
from skimage import io
from skimage.transform import resize
from keras import backend as K
from keras.models import Sequential
from keras.layers import Dropout, Flatten, Dense
from keras import applications
from flask import Flask, jsonify, request, abort, make_response

app = Flask(__name__)

auth_token = 'WyIxYSDFg467YT.A3MmJlODcyODkzOGQzZjk4YzUiXQ.B5e5SgsDcaMgiRqx21Ydf8M'

top_model_weights_ethnicity = 'ethnicity.071217.23-0.28.hdf5'
img_width, img_height = 139, 139
confidence_ethnicity = '0.59'

detector = dlib.get_frontal_face_detector()
graph = K.get_session().graph

class_to_label_ethnicity = {"0": "arabs", "1": "asia", "2": "black", "3": "hispanics-latinos",
"4": "southasia", "5": "white"}

def get_face(path):
with graph.as_default():
img = io.imread(path)
dets = detector(img, 1)
output = None
for i, d in enumerate(dets):
img = img[d.top():d.bottom(), d.left():d.right()]
img = resize(img, (img_width, img_height))
output = np.expand_dims(img, axis=0)
break
return output


def get_pretrained_model():
with graph.as_default():
pretrained_model = applications.InceptionResNetV2(include_top=False, weights='imagenet',
input_shape=(img_width, img_height, 3))
return pretrained_model


def get_features(image, pretrained_model):
with graph.as_default():
features = pretrained_model.predict(image)
return features


with graph.as_default():
pretrained_model = get_pretrained_model()
model_ethnicity = Sequential()
model_ethnicity.add(Flatten(input_shape=(3, 3, 1536)))
model_ethnicity.add(Dense(256, activation='relu'))
model_ethnicity.add(Dropout(0.5))
model_ethnicity.add(Dense(6, activation='softmax'))
model_ethnicity.load_weights(top_model_weights_ethnicity)

@app.route("/predict/ethnicity", methods=['GET', 'POST'])
def predict_ethnicity():
with graph.as_default():
if request.args.get('auth_token') != auth_token:
abort(make_response(jsonify(message="No valid access token. Write an email to research@influencerdb.com "
"to become authenticated."), 403))
confidence = request.args.get('confidence', confidence_ethnicity)
if request.method == 'POST':
if 'file' not in request.files:
abort(make_response(jsonify(message="No image found. Use 'file' as a key to upload an image."), 404))
else:
file = request.files['file']
path_to_img = "uploaded/%s" % file.filename
file.save(path_to_img)
else:
path_to_img = request.args.get('url')
if get_face(path_to_img) is None:
abort(make_response(jsonify(message="No face found."), 454))
else:
features = get_features(get_face(path_to_img), pretrained_model)
prediction = model_ethnicity.predict_proba(features)
ethnicity = {class_to_label_ethnicity[str(y)]: str(value) for (x, y), value in np.ndenumerate(prediction)}
suggestion = class_to_label_ethnicity[str(np.argmax(prediction[0]))] \
if np.max(prediction[0]) > float(confidence) else ""
return jsonify({'probabilities': ethnicity, 'suggestion': suggestion}), 200


if __name__ == "__main__":
app.run(host='0.0.0.0')

myproject.ini(wsgi配置)

[uwsgi]
module = wsgi:app
master = true
processes = 5
socket = myproject.sock
chmod-socket = 660
vacuum = true
die-on-term = true

系统单元文件

[Unit]
Description=uWSGI instance to serve myproject
After=network.target
[Service]
User=rehan_aziz
Group=www-data
WorkingDirectory=/home/rehan_aziz/myproject
Environment="PATH=/home/rehan_aziz/anaconda3/envs/myproject/bin"
ExecStart=/home/rehan_aziz/anaconda3/envs/myproject/bin/uwsgi --ini myproject.ini
[Install]
WantedBy=multi-user.target

nginx 配置文件

server {
listen 80;
server_name 35.230.90.108;
location / {
include uwsgi_params;
uwsgi_pass unix:///home/rehan_aziz/myproject/myproject.sock;
}
}

wsgi 应用服务文件

from myproject import app

if __name__ == "__main__":
app.run()

最佳答案

看来这是Keras和uwsgi中threading的问题

所以将 master 设置为 false 并将 processes 更改为 1 为我解决了这个问题,但这仍然是一个问题,因为它无法扩展。但它适用于实验

所以在 myproject.ini 中更改此设置

[uwsgi]
module = wsgi:app
master = false <-- this
processes = 1 <-- and this
socket = myproject.sock
chmod-socket = 660
vacuum = true
die-on-term = true

关于python - flask 应用程序通过 Uwsgi 和 Nginx 给出 504 超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49255545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com