Flask REST API очень медленный на простой конечной точке

#flask

#flask

Вопрос:

Я использую Flask REST API для своего приложения, и я заметил, что когда я отправляю запросы извне моей собственной сети, это иногда происходит очень, очень медленно. Большинство вызовов завершается в течение 150 мс, но некоторые занимают 8 секунд. Подключение к базе данных осуществляется к базе данных MySQL с использованием DBUtils.PersistentDB

Код для конечной точки:

 @app.route("/name", methods=["POST"])
@jwt_refresh_token_required
def get_name_and_company():
    user = get_jwt_identity()
    response_object = server_functions.get_name_and_company(user)
    return response_object
  

Функция, которую он использует:

 def get_name_and_company(user):
    sql = "SELECT fysios.firstname, fysios.lastname, companies.name FROM 
fysios "  
        "INNER JOIN companies ON fysios.companyID = companies.id WHERE fysios.email = %s"
    cursor = flask_server.get_db().cursor()
    cursor.execute(sql, user)
    data = cursor.fetchall()
    first_name = data[0]['firstname']
    last_name = data[0]['lastname']
    company = data[0]['name']
    response_object = name_and_company(first_name, last_name, company)
    return make_response(jsonify(response_object)), 200
  

Вот временные метки на сервере Flask (это внутренний сервер разработки, но я запускаю его с threaded = True):

 [08/Mar/2019 22:16:54] "OPTIONS /login HTTP/1.1" 200 -
[08/Mar/2019 22:16:55] "POST /login HTTP/1.1" 200 -
[08/Mar/2019 22:16:55] "OPTIONS /clients HTTP/1.1" 200 -
[08/Mar/2019 22:16:55] "OPTIONS /verifyLogin HTTP/1.1" 200 -
[08/Mar/2019 22:16:55] "POST /clients HTTP/1.1" 200 -
[08/Mar/2019 22:16:57] "POST /verifyLogin HTTP/1.1" 200 -
[08/Mar/2019 22:16:57] "OPTIONS /name HTTP/1.1" 200 -
[08/Mar/2019 22:16:58] "POST /clients HTTP/1.1" 200 -
[08/Mar/2019 22:17:05] "POST /name HTTP/1.1" 200 -
  

Как вы можете видеть, /name занимает в общей сложности 8 секунд, и я не могу выяснить, почему. Этот вызов /name — всего лишь пример, это может произойти при любом из вызовов. Есть ли способ узнать, где на самом деле застряло приложение Flask?

Ответ №1:

Развертывание в AWS Beanstalk решило проблему. Я не знаю, виноваты ли ограничения встроенного сервера разработки, но это то, что сделало это для меня.