Ich benutze Python-Modul mysql.connector
für den Anschluss an eine AWS RDS
Instanz.Python mysql.connector Schreibfehler beim Verbindungsabbau unterbricht für 30 Sekunden
Nun, wie wir wissen, wenn wir eine Anfrage für eine Weile nicht an SQL Server senden, trennt die Verbindung.
Um dies zu behandeln, stelle ich eine Verbindung zu SQL wieder her, falls eine Lese-/Schreibanforderung fehlschlägt.
Jetzt ist mein Problem mit der "Anfrage fehlgeschlagen", dauert es erheblich zu scheitern. Und nur dann kann ich mich wieder verbinden und meine Anfrage wiederholen. (Ich habe dies als Kommentar im Code-Snippet aufgezeigt).
Für eine Echtzeitanwendung wie meine ist dies ein Problem. Wie könnte ich das lösen? Ist es möglich, herauszufinden, ob die Trennung bereits erfolgt ist, so dass ich eine neue Verbindung versuchen kann, ohne auf eine Lese-/Schreibanforderung warten zu müssen?
Hier ist, wie ich es in meinem Code behandeln jetzt:
def fetchFromDB(self, vid_id):
fetch_query = "SELECT * FROM <db>"
success = False
attempts = 0
output = []
while not success and attempts < self.MAX_CONN_ATTEMPTS:
try:
if self.cnx == None:
self._connectDB_()
if self.cnx:
cursor = self.cnx.cursor() # MY PROBLEM: This step takes too long to fail in case the connection has expired.
cursor.execute(fetch_query)
output = []
for entry in cursor:
output.append(entry)
cursor.close()
success = True
attempts = attempts + 1
except Exception as ex:
logging.warning("Error")
if self.cnx != None:
try:
self.cnx.close()
except Exception as ex:
pass
finally:
self.cnx = None
return output
In meiner Anwendung kann ich nicht eine Verzögerung von mehr als 1 Sekunde tolerieren, während sie von MySQL zu lesen.
Während MySQL konfigurieren, ich bin gerade dabei die folgenden Einstellungen:
SQL.user = '<username>'
SQL.password = '<password>'
SQL.host = '<AWS RDS HOST>'
SQL.port = 3306
SQL.raise_on_warnings = True
SQL.use_pure = True
SQL.database = <database-name>
Die Zeit zwischen Abfragen ist nicht festgelegt. Manchmal haben wir viele Anfragen in kurzer Zeit. Und manchmal kann es eine Lücke von bis zu 5 Minuten geben. Ich denke über den von Ihnen erwähnten No-Op-Abfrageansatz nach. Vielen Dank! – vishal