Flask Socket-IO с Eventlet, MySQL и NGINX - PullRequest
0 голосов
/ 07 марта 2020

У нас есть виртуальная машина, обрабатывающая запросы с NGINX и передающая запросы на порт 8000, мы инициализируем наше приложение flask с помощью socketio.run (app, '0.0.0.0', port = 8000), мы инициализируем объект socketio следующим образом:

import eventlet
eventlet.monkey_patch()

socketio = SocketIO(app, async_mode="eventlet")

Внутри нашего приложения мы используем flask -sqlalchemy для общения с базой данных MySQL.

Все работает более или менее, как и ожидалось, некоторое время, но затем, после обработки нашего запроса, загрузка процессора увеличивается до 100%, при этом python3 занимает 50%, а mysqld - другую половину.

Если я удаляю материал с помощью eventlet, проблема с mysqld сохраняется. , но вместо socketio-сообщений, приходящих по одному за раз, они все приходят сразу. Когда я делаю это, и с go по mysql и SHOW PROCESSLIST, я вижу один запрос, если таковой имеется, обычно создается впечатление, что он создает индекс сортировки или отправляет клиенту, это то, что, похоже, съедает мой процессор здесь.

Когда Eventlet включен, я вижу несколько из этих процессов в MySQL. Я собираюсь поработать, чтобы определить, почему у меня так часто создается процесс создания индекса сортировки, когда не выполняется Eventlet. Однако я понятия не имею, что происходит, когда я запускаю eventlet.

Кто-нибудь испытывал подобные проблемы?

...