0

私は次のデータベース接続コードを持っています。最初は複数回試行するためのwhileループがありませんでしたが、実際に失敗する前に複数回試行する方が良いと思いました。私の質問は、これを達成するための最良の方法は何ですか?ティマーを使用する必要がありますか?そして、再試行する前に少し眠りますか?

    while connect_attempts < 3:
        try:
            # dbname cann't have hyphen but host name can'
            db_name = self.language.replace('-','_') + 'db'
            print 'Connecting to DB ' + db_name
            logging.info("Connecting to Toolserver MySql Db: " + db_name)
            self.dbConnection = MySQLdb.connect(
                db=db_name,
                host=self.language + "someserver_name.org",
                read_default_file=os.path.expanduser("~/.my.cnf"))
            logging.info("Connection Successful: " + str(self.dbConnection))
            self.dbCursor = self.dbConnection.cursor(cursors.DictCursor)
        except MySQLdb.Error, e:
            logging.error("Unable to establish connection MySQL ERROR - attempt-" + str(connect_attempt), e.value)
            connect_attempts += 1
4

2 に答える 2

0

ここに示されているように、デフォルトのパラメーターはタイムアウトではないと思います

パラメータを渡してタイムアウトを設定できます。10 秒後、この接続はドロップされ、接続を確立するための別の試行が行われます。

于 2013-03-19T17:37:45.340 に答える
0

Sumeet のアドバイスに従って、 を呼び出すときにタイムアウトを設定する必要がありますMySQLdb.connect()。ただし、接続は他の多くの理由で失敗する可能性もあります (たとえば、サーバーがビジー状態であるために接続をすぐに拒否したり、何らかのメンテナンス モードになっているためです。実際の例ではありませんが、想像してみてください)。

独自のループにも短い遅延を含める必要があります。例外ハンドラで数秒実行を遅らせます。

于 2013-03-20T15:06:04.093 に答える