2016-08-08 74 views
3

Bei der Verwendung von Flask-SQLAlchemy bekomme ich nach einiger Zeit den Fehler 'QueuePool Limit der Größe 10 Überlauf 10 erreicht, Verbindung abgelaufen' konsequent. Ich habe versucht, die Größe des Verbindungspools zu erhöhen, aber es hat das Problem nur verzögert.SQLAlchemy erhöht QueuePool Grenzwert der Größe 10 Überlauf 10 erreicht, Verbindung nach einiger Zeit unterbrochen

def create_app(config_name): 
    app = Flask(__name__) 
    app.config.from_object(config[config_name]) 
    config[config_name].init_app(app) 
    initialize_db(app) 

db = SQLAlchemy() 

def initialize_db(app): 
    db.init_app(app) 

SQLALCHEMY_POOL_SIZE = 100 

Antwort

2

dachte ich, das Problem. Das Problem war manchmal, dass die Datenbankverbindung verloren ging, was dazu führte, dass die Poolgröße nach einiger Zeit erschöpft war.
Um das Problem zu beheben, habe ich die MySQL Server-Konfiguration für Abfrage Timeout geändert und es 1 Sekunde gemacht.
Nach 1 Sekunde, wenn die Abfrage nicht geantwortet hat, wird Exception ausgelöst und ich außer block im Code, wo diese Abfrage aufgerufen wurde (in meinem Fall war es GET-Abfrage). Im Block "Ausgenommen" habe ich den Rollback-Befehl ausgegeben.

0

Ich hatte gerade dieses Problem.


Meine Situation

  • Ich habe noch nicht meine Website ins Leben gerufen, und so weiter Ich verbringe fast meine ganze Zeit mit der lokalen Version interagieren, die von PyCharm betrieben wird (dh mein Computer), und so bemerkte ich nur den Fehler auf meiner lokalen Version der Site, und ich versuchte nicht einmal zu sehen, ob es auch in der von PythonAnywhere gehosteten Produktionsversion der Site auftreten würde.
  • Ich verwende eine MySQL-Datenbank.
  • IIRC Ich bemerkte das Problem zum ersten Mal, als ich anfing, häufige (alle 10 Sekunden) API-Aufrufe von meinem Front-End-JavaScript auszuführen.
  • Ich hatte debug=False in meinem app.run(), so wurde es nicht von debug=True verursacht, was etwas anderes vorgeschlagen wird.

Wie ich es behoben weg

Das Problem ging, als ich von threaded=True in meinem app.run() losgeworden.

  • Also, vorher sah es wie folgt aus:
    • app.run(debug=False, threaded=True)
  • und habe ich es wie folgt aussehen:
    • app.run(debug=False)