Twisted、MySQLdb 和 (2006, 'MySQL 服务器已断开连接') 使用 Twisted adbapi

2 投票
1 回答
2121 浏览
提问于 2025-04-17 03:41

在Twisted框架中,我是一个不断循环的事件处理程序,时刻在寻找新的查询来执行。我会定期检查一个SQS队列,但有时候查询之间的间隔太长,导致连接超时,这时我会收到这样的错误信息...

MySQLdb _mysql_exceptions.OperationalError: (2006, 'MySQL服务器已断开连接')

这是我的连接代码:

self.pool = adbapi.ConnectionPool("MySQLdb", self.parms['host'], self.parms['username'], self.parms['password'], self.parms['database'])

这是我用来尝试解决这个问题的逻辑:

try:
    d = self.pool.runQuery(query, ())
except:
    self.pool = adbapi.ConnectionPool("MySQLdb", self.parms['host'], self.parms['username'], self.parms['password'], self.parms['database']) 
    d = self.pool.runQuery(query, ())
    print 'Reconnecting'

问题是,这个方法似乎效果不太好。所以,如果我遇到206错误,就尝试重新连接并再次执行查询。请问解决这个问题的最佳做法是什么?

谢谢

1 个回答

2

我对adbapi没有经验,不过在文档中提到的cp_reconnect参数,看起来很有希望。

所以你的连接池初始化可能会像这样:

self.pool = adbapi.ConnectionPool("MySQLdb", self.parms['host'], self.parms['username'], self.parms['password'], self.parms['database'], cp_reconnect=True)

撰写回答