У нас есть виртуальная машина, обрабатывающая запросы с 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.
Кто-нибудь испытывал подобные проблемы?