SQLAlchemy核心+金字塔没有关闭连接

时间:2016-09-25 23:40:51

标签: sqlalchemy pyramid

我的 SQLAlchemy CORE 1.0.9 与Pyramid框架 1.7 。我使用以下配置连接到postgres 9.4 数据库:

# file __ini__.py
from .factories import root_factory
from pyramid.config import Configurator
from sqlalchemy import engine_from_config


def main(global_config, **settings):
    """ This function returns a Pyramid WSGI application."""

    config = Configurator(settings=settings, root_factory=root_factory)
    engine = engine_from_config(settings, prefix='sqlalchemy.')

    # Retrieves database connection
    def get_db(request):
        connection = engine.connect()
        def disconnect(request):
            connection.close()
        request.add_finished_callback(disconnect)
        return connection

    config.add_request_method(get_db, 'db', reify=True)
    config.scan()
    return config.make_wsgi_app()

使用应用程序几个小时后,我开始收到以下错误:

sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) FATAL:  remaining connection slots are reserved for non-replication superuser connections

显然我已达到最大连接数。似乎 connections.close()并没有真正关闭连接,只是返回到池的连接。我知道我可以使用 NullPool 来禁用池,但这可能会对性能产生巨大影响。

有人知道配置 SQLAlchemy Core 以获得良好性能并正确关闭连接的正确方法吗?

请弃用发送pyramid tutorials的链接。我对SQLAlchemy ORM设置不感兴趣。请 SQLAlchemy Core

1 个答案:

答案 0 :(得分:0)

实际上在之前的设置中一切都很好。问题是由芹菜工人没有关闭连接引起的。