【发布时间】:2014-10-26 17:30:05
【问题描述】:
我正在运行 PostgreSQL 9.3 和 SQLAlchemy 0.8.2 并且遇到数据库连接泄漏。部署应用程序后消耗大约 240 个连接。在接下来的 30 小时内,这个数字逐渐增加到 500,届时 PostgreSQL 将开始丢弃连接。
我使用 SQLAlchemy thread-local sessions:
from sqlalchemy import orm, create_engine
engine = create_engine(os.environ['DATABASE_URL'], echo=False)
Session = orm.scoped_session(orm.sessionmaker(engine))
对于 Flask Web 应用程序,.remove() 对 Session 代理对象的调用在请求拆除期间发送:
@app.teardown_request
def teardown_request(exception=None):
if not app.testing:
Session.remove()
这应该与Flask-SQLAlchemy 所做的相同。
我还有一些在循环中运行的周期性任务,我为循环的每次迭代调用.remove():
def run_forever():
while True:
do_stuff(Session)
Session.remove()
我做错了什么可能导致连接泄漏?
【问题讨论】:
-
遇到了类似的问题,通过在
@app.teardown_request中调用sqlalchemy.engine.Engine.dispose()解决了问题,请在此处查看我的问题:stackoverflow.com/questions/69886037/…
标签: python postgresql flask sqlalchemy