Мы разрабатываем приложение 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 (). Но я не понимаю, как это приведет к многопоточности.