我正在使用PostgreSQL 9.3和SQLAlchemy 0.8.2,并且遇到了数据库连接泄漏的问题。应用程序部署后会消耗约240个连接。在接下来的30小时内,这个数字逐渐增长到500,在这时PostgreSQL将开始丢失连接。
我使用SQLAlchemy的上下文线程本地会话:
我做错了什么可能导致连接泄漏?
我使用SQLAlchemy的上下文线程本地会话:
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()
解决了。请参考我的这个问题:https://stackoverflow.com/questions/69886037/sqlalchemy-database-session-not-being-removed-after-web-request - William May