Я поддерживаю сервер API для моей компании, которая запускает приложение python flask в uwsgi поверх nginx .
...
@app.route('/getquick', methods=["GET"])
def GET_GET_IP_DATA():
sp_final = "CALL sp_quick()"
cursor.execute(sp_final)
@app.route('/get_massive_log', methods=["POST"])
def get_massive_log():
sp_final = "CALL sp_slow()"
cursor.execute(sp_final)
...
Хотя первый запрос / getquick обрабатывается очень быстро, / get_massive_log может занять до пяти секунд из-за довольно длинного и сложного запроса mySQL .Сервер может обработать несколько таких запросов, но начинает вызывать ошибки неработающего канала при вызове большого количества.
Проблема в том, что другие запросы / getquick блокируются этими длинными запросами ввода-вывода.
Мой менеджер предложил использовать gevent , чтобы каким-то образом освободить сервер для обработки других запросов во время ожидания запросов mySQL, но я не уверен, смотрю ли я в правильном направлении.
Я использую pymysql для выполнения запросов, которые Google, похоже, предлагает работать с gevent поверх uwsgi , но я не смог произвести лучшерезультаты с ним.
Я уже несколько дней гуглю, и хотя я пытаюсь понять потоки, параллелизм, асинхронные запросы, я не знаю, с чего начать копать, чтобы найти решение.Это вообще возможно?Будем весьма благодарны за любые предложения или даже указания на то, где проводить исследования.
РЕДАКТИРОВАТЬ: Возможно, мои вопросы были не слишком ясными, поэтому я попытаюсь повторить это:
Какой лучший способ освободить работников для обработки других запросов во время ожидания длинных запросов к базе данных с помощью uwsgi?