如何完全关闭Flask和SQLAlchemy上的postgresql事务空闲?

Jon*_*use 2 python postgresql sqlalchemy flask

我正在使用 PostgreSQL 作为 RDB,使用 Flask 和 sqlalchemy 开发应用程序。
我很好奇 PostgreSQL 在请求完成时不会拆除空闲事务。

以下是在 Flask 上拆解 PostgreSQL 事务的代码:

@app.after_request
def after_request(r):
    db.dispose()
    session.close()
Run Code Online (Sandbox Code Playgroud)

但我仍然可以看到 PostgreSQL 的空闲事务处理过程。

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

如何在应用程序代码中终止该进程?

Cra*_*ger 6

您看到的不是交易,而是没有开放交易的会话。

大多数系统都会汇集连接,以节省为每笔事务设置和拆除连接的成本。您很可能会看到 SQLAlchemy 端的池中持有一个连接,等待更多工作。

只要它在交易中不闲置就可以了。

要控制此行为,请调整 SQLAlchemy 的连接池

检查pg_stat_activity更多细节,而不是依赖ps