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 回答