2016-07-10 16 views
0

Bitte ich brauche Hilfe mit dem folgenden Fehler, den ich auf der 16. Datenbankverbindung bekomme. Keiner der anderen Antworten auf Stackoverflow zu funktionieren scheint:Flask SqlAlchemy MySQL-Verbindung wegen QueuePool-Überlauflimit abgelaufen

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

Backend-Konfiguration:

  • Python 2.6.9
  • Flask 0.10.1
  • Flask-SQLAlchemy 2.1
  • MySQL- connector-python 1.0.12
  • Mysql 5.6.27

Database Setup:

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

Was macht Ihre Anwendung, dass Ihre Verbindungen für 30+ Sekunden aktiv sind? – dirn

+0

Die Anwendung benötigt die Verbindung für 30+ Sekunden nicht. Aus irgendeinem Grund werden die Verbindungen nach jeder Anforderung nicht in den Pool zurückgeleitet. Wenn alle Verbindungen aufgebraucht sind, wartet sie 30 Sekunden lang auf eine verfügbare Verbindung, bevor sie diesen Fehler auslöst. – Kes115

Antwort

1

ich das Problem erkannt habe ist, dass ich einen separaten Threadpool mit Themen geschaffen, die nicht beendet wurde und meine Datenbank alle Verbindungen wurden offen zu halten, auch nachdem die Reaktion auf dem zurückgegeben wurde Klient. Das war ein schlechter Hack und eine schreckliche Idee. Ich beabsichtige, diesen Threadpool loszuwerden und Sellerie zu verwenden, um asynchrone Aufgaben zu planen.