当前位置: 主页 > 日志 > Python >

MySQLdb出现'MySQL server has gone away异常时自动重连的实现

一个数据采集脚本,使用MySQLdb将数据保存到MySQL中,脚本运行一次需要好几天的时间,运行中途出现_mysql_exceptions.OperationalError: (2006, 'MySQL server has gone away') 异常。

因为需要频繁写入数据,每次写入前再建立连接效率太低。但是如果只在开始建立一次连接,就会容易出现MySQL server has gone away的问题。

我使用的方法是给涉及数据库操作的函数加一个装饰器,装饰器函数内部如果捕获到'MySQL server has gone away'异常就尝试重连数据库,装饰器代码如下:

class DB:
    """Database interface"""
    
    def retry(func):
        def call(self, *args, **kwargs):
            #print self.settings
            attempts = 0
            while attempts < 5:
                lock.acquire()
                try:
                    return func(self, *args, **kwargs)
                except MySQLdb.Error, e:
                    common.logger.info(str(e))
                    if 'MySQL server has gone away' in str(e):
                        common.logger.info('MySQL server has gone away, will try to re-connect.')
                        # re-connect MySQL
                        self.connect_mysql()
                        attempts += 1
                    else:
                        # No need to retry for other reasons
                        attempts = 5
                finally:
                    lock.release()
        return call
    
    def __init__(self):
        pass

    @retry
    def save_location(self, location):
        pass

[日志信息]

该日志于 2013-01-17 17:25 由 redice 发表在 redice's Blog ,你除了可以发表评论外,还可以转载 “MySQLdb出现'MySQL server has gone away异常时自动重连的实现” 日志到你的网站或博客,但是请保留源地址及作者信息,谢谢!!    (尊重他人劳动,你我共同努力)
   
验证(必填):   点击我更换验证码

redice's Blog  is powered by DedeCms |  Theme by Monkeii.Lee |  网站地图 |  本服务器由西安鲲之鹏网络信息技术有限公司友情提供

返回顶部