AWS RDS
インスタンスへの接続には、Pythonモジュールmysql.connector
を使用します。python mysql.connector接続切断時の書き込みが30秒間停止する
私たちが知っているように、しばらくの間、SQLサーバーに要求を送信しなければ、接続は切断されます。
これを処理するには、の読み取り/書き込み要求が失敗した場合にSQLに再接続します。
私の問題は"要求が失敗" 今、失敗することが重要です。そして、私は再接続して、私の要求をやり直すことができます。 (私はこれをコードスニペットのコメントとして指摘しています)。
私のようなリアルタイムアプリケーションの場合、これは問題です。どうすればこの問題を解決できますか?切断が既に発生しているため、読み取り/書き込み要求を待たずに新しい接続を試すことができるかどうかを調べることは可能ですか?ここで
は、私は今の私のコードでそれを処理する方法である:私のアプリケーションで
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
のmysqlから読みながら、私は1秒以上の遅延を許容することはできません。
MySQLを設定する際に 、私がやっているだけで、次の設定:
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>
クエリの間隔は固定されていません。時々、我々は短時間で多くのクエリを持っています。そして、時には、5分の間隔があることもあります。あなたが言及したノーオペレーションクエリのアプローチを検討しています。ありがとう! – vishal