【发布时间】:2014-12-11 13:11:07
【问题描述】:
我正在为我的服务器使用 Flask + SQLAlchemy(DB 是 Postgres),我想知道连接池是如何发生的。我知道它默认启用,池大小为 5,但我不知道我的代码是否触发它。
假设我使用默认的烧瓶 SQLalchemy 桥:
db = SQLAlchemy(app)
然后使用该对象进行数据库调用,例如
db.session.query(......)
flask-sqlalchemy 如何在后台管理连接池?每次我访问 db.session 时它都会抓取一个新会话吗?这个对象什么时候返回到池中(假设我没有将它存储在局部变量中)?
编写代码以最大化并发性 + 性能的正确模式是什么?如果我以一种串行方法多次访问数据库,是否每次都使用 db.session 是个好主意?
我无法找到有关这种方式的文档,所以我不知道幕后发生了什么(代码有效,但它会扩展吗?)
谢谢!
【问题讨论】:
-
您遇到了什么具体问题?
-
我不知道我的服务器在重负载下将如何响应 - 多个并发请求会同时进入阻塞吗?他们会得到正确的对待吗?我是否会比我必须的更多地将物体带入/归还到池中?游泳池是否会扩大到超出预期范围?
-
我正在使用 Flask-SQLAlchemy 并获得 70 多个并发连接,它工作得很好。
-
这并不一定能回答它是如何工作的。我知道它确实有效。我相信(可能是错误的)reddit 使用 SQLAlchemy。
-
如果您指的是 SQLAlchemy 如何处理会话,我认为它使用 SQLAlchemy 的 scoped_session。
标签: python postgresql flask sqlalchemy flask-sqlalchemy