SQLAlchemy: Timeout nach 30 Sekunden?
Verfasst: Freitag 2. Juni 2017, 15:54
Hallo Leute,
ich habe ein merkwürdiges Problem. Wenn ich einige Datensätze in die Datenbank hinzufüge, bekomme ich nach einer Weile folgende Meldung:
Soll ich etwa zur Sicherheit session.close() innerhalb der With-Anweisung schreiben, damit nach der commit()-Methode die Session tatsächlich geschlossen wird, ehe die With-Anweisung verlassen wird?
Meine Engine ist wie folgt konfiguriert:
Die Sache ist einfach, dass das Problem nicht nach dem ersten Datensatz auftaucht, sondern erst (sagen wir mal ungefähr) nach 20 Eingaben. Wenn ich also beispielsweise 20 Datensätze abgespeichert habe, fängt mein Programm an zu stocken, die GUI friert ein, und dann bekomme ich diesen oben genannten Traceback.
ich habe ein merkwürdiges Problem. Wenn ich einige Datensätze in die Datenbank hinzufüge, bekomme ich nach einer Weile folgende Meldung:
Die Meldung ist deshalb merkwürdig, weil ich die gegebene Session mit dem With-Context arbeite bzw. behandle. Das heißt, nach jeder Benutzung wird die Session automatisch geschlossen, korrekt? Da mein Projekt mittlerweile sehr umfangreich geworden ist, habe ich als Beispiel nur einen kleinen, nicht ausführbaren Ausschnitt mit gebracht. Als Zusatzinformation: Die Einträge in die Datenbank findet in einem Neben-Thread statt, also nicht im Hauptthread. Denn ich möchte nicht, dass meine GUI einfriert, während SQLAlchemy arbeitet. Das heißt, dass Laden, Speichern, Löschen und Bearbeiten von Datensätzen werden auf NebenThread verlegt. Aber der Nebenthread wird nach Gebrauch wieder zum Löschen freigegeben.TimeoutError: QueuePool limit of size 5 overflow 10 reached, connection timed out, timeout 30
Code: Alles auswählen
[...]
def add_film_genre(self, genre=None):
test = FILM_GENRE
with self._session_scope as session:
session.add(FILM_GENRE(Genre=genre))
session.commit()
return
[...]
Meine Engine ist wie folgt konfiguriert:
Code: Alles auswählen
[...]
url = '{}+{}://{}:{}@{}:{}/{}'.format(
self.dbms, self.dbdriver, self.dbuser, self.dbuser_pwd, self.db_server_host, self.dbport, self.db_name)
self._Engine = create_engine(url, encoding='utf8', echo=True)
[...]