Освободить работников для обработки во время ожидания длинных запросов к БД (uWSGI)? - PullRequest
0 голосов
/ 23 ноября 2018

Я поддерживаю сервер 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?

1 Ответ

0 голосов
/ 24 ноября 2018

Вам необходимо узнать о разгрузке Uwsgi

Разгрузка - это способ оптимизации крошечных задач, делегирование их одному или нескольким потокам.

Эти потокизапускать такие задачи неблокирующим / выравниваемым способом, допуская огромное количество параллелизма.

О разгрузке подсистемы можно прочитать в документах

...