2016-09-25 4 views
0

나는 이 있습니다. SQLAlchemy CORE 1.0.9 피라미드 프레임 워크 1.7입니다. 몇 시간 후SQLAlchemy core + 피라미드가 연결을 닫지 않음

# 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 

은 분명히 내가 도달하고 난 9.4 데이터베이스가 포스트 그레스에 연결하기 위해 다음과 같은 구성을 사용하고 있습니다 최대 연결 수. connections.close()과 같은 연결은 실제로 연결을 닫지 않고 그냥 풀에 대한 연결을 반환합니다. NullPool을 사용하여 풀링을 사용 중지 할 수 있지만 성능에 큰 영향을 미칠 수 있습니다.

누가 올바른 방법으로 구성 할 수 있습니까? SQLAlchemy Core 좋은 성능을 얻고 제대로 연결을 닫으려고합니까?

pyramid tutorials으로 링크를 보내지 마시기 바랍니다. 나는 이 아니며 SQLAlchemy ORM 설정에 관심이 없습니다. SQLAlchemy Core하십시오.

+0

Zope Transaction Manager (pyramid_tm)를 사용해야한다고 생각합니다. 이것은 요청 처리와 통합되는 Pyramid 앱의 래퍼입니다. 요청이 사고없이 완료되면 자동으로 트랜잭션을 커밋합니다. 또는 예외가 발생하면 트랜잭션을 중단합니다. [추가 정보] (http://pyramid-sqlalchemy.readthedocs.io/en/latest/transactions.html) – webjunkie

+0

FWIW 예제 코드에 이상한 부분이 없습니다. ORM은 일을 확실히하기 위해'Session.remove'를 가지고 있지만 SQLA core를 사용하면'.close'가 작동합니다. –

답변

0

실제로 이전 설정에서 모든 것이 잘되었습니다. 이 문제는 셀러리 작업자가 연결을 끊지 않아 발생했습니다.

관련 문제