Сервер devas dev с включенными потоками, обслуживающий приложение flask-sqlalchemy, становится очень нестабильным - PullRequest
0 голосов
/ 13 сентября 2018

Мы разрабатываем приложение Flask, которое в значительной степени опирается на модуль интеграции flask-sqlalchemy. SQLAlchemy используется для подключения к нашей базе данных MonetDB.

При запуске приложения с помощью команды

flask run

служба нерегулярно, но часто зависает от различных странных симптомов сайта клиента базы данных, связанных с обменом данными с базой данных, например, Соединение с базой данных закрыто, не удалось декодировать некоторые символы и другие трудно интерпретируемые ошибки.

Я знаю, что по умолчанию на сервере разработки Flask Werkzeug включены потоки, и когда мы запускаем сервер разработки без потоков

flask run --disable-threads

сервис работает как брелок без ошибок.

Сканируя нашу кодовую базу, я думаю, что мы настраиваем и используем flask-sqlalchemy прямым путем:

app = Flask(__name__)
app.config.from_object(config[environment])
db.init_app(app)

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

...
db.create_all()
db.session.add(foo)
db.session.add(bar)
...
db.session.commit()

Насколько я знаю, член сеанса объекта SqlAlchemy db является экземпляром ScopedSession, и поэтому он должен быть локальным и, следовательно, потокобезопасным объектом. Но тем не менее у нас возникают проблемы с вышеупомянутыми ошибками.

Единственное, что я могу себе представить, это то, что иногда за изменениями базы данных не всегда следует db.session.commit (), т. Е. Мы забываем вызывать session.commit (). Но я не понимаю, как это приведет к многопоточности.

...