nginx + Flask: как заставить его ждать, пока сервер не будет готов к работе? - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь создать REST-API, используя Nginx и Flask. Дело в том, что я не уверен, как это сделать правильно. Я не нашел подходящих гидов. Что у меня сейчас: /etc/nginx/conf.d/myservice.conf:

upstream myapp1 {
least_conn;
    server 127.0.0.1:4100;
    server 127.0.0.1:4101;
    server 127.0.0.1:4102;
}

server {
    listen 1335;

    location / {
        proxy_pass http://myapp1;
    }
}

Если я правильно понимаю, он перехватывает запросы с 1335 и переадресует его на 4101-4102. less_conn должен сделать его более эффективным, верно? Мое главное требование: если все серверы заняты, Nginx должен немного подождать и повторить попытку. Если это слишком сложно и требует что-то вроде сельдерея, то я согласен: пользователь должен получить код ошибки 418 (например).

Мои основные проблемы, связанные с приложением Flask. Мой код api.py: Внимание на «состояние». Я хочу, чтобы он загружался только один раз при запуске приложения, а не каждый раз, когда принимается запрос. Если я запускаю 3 потока с 3 * 6 = 18 ГБ данных в ОЗУ - это нормально для меня.

import everything_i_need
some_other_commands

app = Flask(__name__)
app.url_map.strict_slashes = False

state = *some_code_here* #6GB of data. Model for a neural network.

@app.route('/api/v1/something/', methods=['POST'])
def do_it:
    request_str = request.get_data().decode('utf-8').strip()
    response = some_program.some_method(state, request_str)
    return response, 200


if __name__ == '__main__':
    app.run(host='0.0.0.0',port=4100, threaded=True)
    app.run(host='0.0.0.0',port=4101, threaded=True)
    app.run(host='0.0.0.0',port=4102, threaded=True)

Я почти уверен, что делаю с этим что-то совершенно не так. Есть ли правильный способ сделать N экземпляров "состояния" и N портов?

Я называю api.py в качестве службы (у меня для этого есть конфигурация systemd).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...