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

标签 python postgresql flask sqlalchemy

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

这是拆解 Flask 上 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

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

最佳答案

您看到的不是事务,而是没有未完成事务的 session 。

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

只要它在事务中不空闲就没问题。

为了控制这种行为,tune SQLAlchemy's connection pool .

检查 pg_stat_activity 以获得更多详细信息,而不是依赖于 ps

关于python - 如何完全关闭 Flask 和 SQLAlchemy 上的 postgresql 事务空闲?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32173608/

相关文章:

Python字典将参数传递到函数中用作值

postgresql - 为 Postgres 交叉表动态生成 AS 子句

postgresql - 用于时间序列的 Postgres hstore

postgresql - 通过 PhpStorm 连接到 PostgreSQL

python - 在线程中运行 flask-socketio

javascript - 在 URL 前缀下将 React 应用程序添加到 Flask

python - 使用应用工厂时绑定(bind)路由

python - 切片列表的枚举()不能按预期工作

python - 高效的 numpy.cumsum 和 numpy.digitize

python - 在 Python 中定义变量(宏)