есть читать на эту тему, и я сделал.Я не могу заставить это работать на всю жизнь.
У меня есть приложение Flask, состоящее из нескольких чертежей, каждый из которых использует одну или две разные базы данных на сервере MariaDB.Все чертежи следуют этому шаблону:
from .. import common
Session = common.mysql_sessionmaker("stammdaten")
@blp.route('/login', methods=["POST"])
def login_form():
db = Session()
Функция mysql_sessionmaker в ..common выглядит следующим образом:
def mysql_sessionmaker(dbname):
engine = create_engine(
"mysql://dham@localhost" + '/' \
+ dbname + '?charset=utf8mb4',
pool_recycle=60,
pool_pre_ping=True)
return scoped_session(sessionmaker(engine))
Так что я использовал все советы и хитрости, которые я мог найти по этому поводупроблема:
- Сокращение pool_recycle с первоначально 1800 до смехотворно короткого времени
- use pool_pre_ping
- использование scoped_session ()
Но длябезрезультатно.Конечно, я не могу воспроизвести эту ошибку.Это довольно низкочастотный сайт в интранете компании (несколько десятков звонков в день), и всякий раз, когда я его использую, он отлично работает.Но каждое утро я проверяю логи apache, чтобы найти скрининг огромных дампов стека Python из глубины SQLAlchemy.
В своем отчаянии я даже пытался переместить весь код установки базы данных в функцию @before_request, чтобы каждыйзапрос будет начинаться полностью с нуля.Все та же ошибка.
Куча PHP-скриптов на одном сервере вообще не имеет проблем с базой данных.
Сервер mariadb - это готовая установка RedHat, версия 5.50,56.Я не использую flask-sqlalchemy, потому что я не понимаю, что он делает, и потому что он не поддерживает несколько соединений с базой данных (последний раз, когда я проверял).
[EDIT] Ошибка не вызвана чрезмернымдлинные запросы.Когда я повторно пробую оскорбительные запросы, они возвращаются менее чем за секунду.