Frage

Ich habe eine Flask -Webanwendung mit SQLalchemy mit MySQL und habe eine ScopedSession () eingerichtet. Ich habe auch einen Teardown_Request -Handler, der Sitzung anruft. Aus irgendeinem Grund erhält die App "OperationalError: MySQL Server ist verschwunden", wenn in der Web -App keine Anfragen für einen Tag oder länger gestellt werden.

In meiner Debugging -Mission habe ich mir die Show ProcessList angesehen und Folgendes gesehen:

39817253 | sqladmin | my_host | kb_dev   | Sleep   |  174 |

Die 174 ist die Anzahl der Sekunden, die die Verbindung meiner Bewerbung "Schlafen" hat. Es wird immer wieder angezeigt, wenn die Bewerbung keine weitere Anfrage stellt.

Es scheint, als würde meine Bewerbung die Verbindung zu MySQL anhalten, auch nachdem meine Anfrage beendet ist! Und es gibt normalerweise nur einen Prozess, egal wie viele Anfragen ich mit meiner Bewerbung gleichzeitig oder nicht mit meiner Bewerbung stelle.

Meine Frage ist, ob es normal ist, dass die Verbindung so lange "schlafen" ist. Ich bin mir ziemlich sicher, dass das verlängerte Schlaf dazu führt, dass MySQL die Verbindung nach einer bestimmten Auszeit verkürzt, was wiederum den Fehler "OperationalError: MySQL verschwand" verursacht.

War es hilfreich?

Lösung

Das Standardverhalten von Sqlalchemy besteht darin, Verbindungen innerhalb des Motors zu bündeln:

http://www.sqlalchemy.org/docs/core/engines.html

http://www.sqlalchemy.org/docs/core/pooling.html

In Bezug auf die Trennung über Nacht ist SQLALCHEMY ein bekanntes MySQL -Verhalten. Hier sind viele Links, die es beschreiben:

http://www.sqlalchemy.org/docs/dialects/mysql.html#connection-Timeouts

http://www.sqlalchemy.org/docs/core/pooling.html#seting-pool-recycle

http://www.sqlalchemy.org/docs/core/engines.html#sqlalchemy.create_engine (Pool_Recycle)

http://www.sqlalchemy.org/trac/wiki/faq#mysqlserverhasgoneaway

Blog -Beitrag von vor wenigen Tagen:

http://douglatornell.ca/blog/2012/01/08/staying-alive/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top