2015-08-24 7 views
1

Я разрабатываю приложение с флягой и sqlalchemy, используя PostgreSQL в качестве RDB.
Мне любопытно PostgreSQL не прерывает транзакцию бездействия при запросе finisheed.Как полностью закрыть транзакцию postgresql бездействия на Flask и SQLAlchemy?

Вот код для демонтажа PostgreSQL операции на колбе:

@app.after_request 
def after_request(r): 
    db.dispose() 
    session.close() 

Но все-таки я могу видеть процесс ожидания транзакции для PostgreSQL.

$ ps axu | grep postgres 
postgres 18127 0.9 1.0 326348 6612 ?  Ss 11:08 0:00 postgres: postgres mydb ::1(59013) idle 

Как я могу завершить процесс в коде приложения?

ответ

3

Что вы видите, это не транзакция, это сеанс без открытой транзакции.

Большинство систем подключаются к пулу, чтобы сэкономить на их настройке и разрыве на каждую транзакцию. Скорее всего, вы видите соединение, которое хранится в пуле на стороне SQLAlchemy, ожидая дополнительной работы.

До тех пор, пока это не праздно в сделке это просто отлично.

Для контроля этого поведения, tune SQLAlchemy's connection pool.

Проверьте, пожалуйста, pg_stat_activity, а не на ps.

Смежные вопросы