Как правильно создавать многопоточные приложения на Flask + SQLAlchemy?

Делаю свое первое большое приложение на Python: Flask + SQL Alchemy
База данных MySQL.

Суть в том, что внутри приложения создаются задания. Каждое задание работает в многопоточном режиме.
Внутри каждого потока происходит множество чтений и записей в БД.

Проблема в том, что при достаточно большом количестве поток (50+) MySQL просто умирает.
Важный момент в том, что каждое задание запускается в отдельном процессе. Внутри процесса уже создаются потоки.
Я не могу понять, где именно узкое место. Выполняются простые операции по чтению-записи данных. Объемы данных не большие.
Руководствуясь своим прошлым обширным опытом на PHP, я знаю, что MySQL должна легко выдерживать подобные нагрузки.

Настройки SQL Alchemy:
SQLALCHEMY_TRACK_MODIFICATIONS = True
SQLALCHEMY_POOL_SIZE = 20
SQLALCHEMY_MAX_OVERFLOW = 5
SQLALCHEMY_POOL_RECYCLE = 5


Создаю объект db:
db = SQLAlchemy(app)

Дальше я его импортирую и использую в других скриптах.

Мне кажется, не правильно я делаю в некоторых местах.
Например, мне нужно в режиме реального времени сделать инкремент значения в БД. Это единственный рабочий вариант кода:
db.session.commit()
task = Task.query.filter_by(id=self.task.id).first()
db.session.query(Task).filter_by(id=self.task.id).update({'progress': task.progress + 1})
db.session.commit()


Ключевой вопрос: как правильно организовать работу с подобным приложением на SQL Alchemy?
Как правильно использовать сессии? И возможно ли отследить момент и источник создания большой нагрузки на MySQL?
Сервер используется крайне мощный и это не узкое место. Может быть специфичные настройки MySQL?
  • Вопрос задан
  • 595 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 22:26
3500 руб./за проект
22 нояб. 2024, в 21:47
3000 руб./за проект
22 нояб. 2024, в 21:44
50000 руб./за проект