一个数据采集脚本,使用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
呵呵,谢谢
VaTG790i.最好的<a href=http://www.kyfei.com>网站推广软件</a>,
非常好
....................
;ui;普i;uighur;ui;ui;个
在unix网络编程中看到了关于TCP/IP的一些内容,我感觉还是写的不够。正在下载中,一定
下载地址呢