2016-07-10 3 views
0

16 번째 데이터베이스 연결에서 다음과 같은 오류 메시지가 나타납니다.플라스크 SqlAlchemy QueuePool 오버플로 한계로 인해 MySQL 연결 시간이 초과되었습니다.

QueuePool limit of size 5 overflow 10 reached, connection timed out, timeout 30 

백엔드 구성 : 유래에 다른 답변 중 어느 것도 제대로 작동하지

  • 파이썬 2.6.9
  • 플라스크 0.10.1
  • 플라스크-SQLAlchemy의 2.1
  • Mysql- 커넥터 - 파이썬 1.0.12
  • mysql 5.6.27

데이터베이스 설정 :

connection_str = 'mysql+mysqlconnector://%s:%[email protected]%s:%s/%s' % (config["DATABASE_USER"], config["DATABASE_PASSWORD"], \ 
                  config["DATABASE_HOST"], config["DATABASE_PORT"], \ 
                  config["DATABASE_SCHEMA1"]) 
engine = create_engine(connection_str, convert_unicode=True, pool_recycle=config["DATABASE_POOL_RECYCLE"]) 
db_session = scoped_session(sessionmaker(autocommit=False, 
             autoflush=False, 
             bind=engine)) 

Base = declarative_base() 
Base.query = db_session.query_property() 

import application_package.models 
Base.metadata.create_all(bind=engine) 


@app.teardown_appcontext 
def shutdown_session(exception=None): 
    db_session.remove() 
+0

연결이 30 초 이상 모두 활성화되었다고하는 응용 프로그램은 무엇입니까? – dirn

+0

애플리케이션에 30 초 이상 연결하지 않아도됩니다. 어떤 이유로 든 연결 요청이 각 요청 후에 풀로 반환되지 않는 것 같습니다. 모든 연결이 모두 소모되면 해당 오류를 던지기 전에 사용 가능한 연결을 30 초 동안 기다리지 못합니다. – Kes115

답변

1

내가 문제를 깨달았다 내가 종료되지 않은 및 응답이 반환 된 후에도 열려있는 내 모든 데이터베이스 연결을 유지했다 스레드를 별도의 스레드를 생성한다는 것입니다 고객. 이것은 나쁜 해킹과 끔찍한 생각이었습니다. 이 스레드 풀을 없애고 샐러리를 사용하여 비동기 작업을 예약하려고합니다.

관련 문제