Я запускаю PostgreSQL 9.3 и SQLAlchemy 0.8.2 и испытываю утечку базы данных. После развертывания приложение потребляет около 240 подключений. В течение следующих 30 часов это число постепенно увеличивается до 500, когда PostgreSQL начнет отменять соединения.Утечка соединений с базами данных: PostgreSQL, SQLAlchemy, Flask
Я использую 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, то .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()
Что я делаю неправильно, что может привести к утечке связи?
Есть ли причина, по которой вы отметили это с помощью фляжки-sqlalchemy, но не используете фляж-sqlalchemy, чтобы сменить сеанс? – davidism
Это также очень плохой способ запуска фоновых задач. Рассмотрите использование сельдерея, есть образец для получения контекста приложения и сеанса db в задаче в документах Flask. – davidism
Как развертывается приложение? –