我有一个python脚本,它在共享linux主机上查询MySQL服务器。出于某种原因,对MySQL的查询经常返回一个“server has gone away”错误:
_mysql_exceptions.OperationalError: (2006, 'MySQL server has gone away')
如果紧接着再次尝试查询,通常会成功。所以,我想知道python中是否有一种明智的方法来尝试执行一个查询,如果失败,可以再试一次,最多可以尝试固定的次数。也许我想在完全放弃之前尝试5次。
下面是我的代码:
conn = MySQLdb.connect(host, user, password, database)
cursor = conn.cursor()
try:
cursor.execute(query)
rows = cursor.fetchall()
for row in rows:
# do something with the data
except MySQLdb.Error, e:
print "MySQL Error %d: %s" % (e.args[0], e.args[1])
很明显,我可以通过在except子句中进行另一次尝试来做到这一点,但那是难以置信的丑陋,而且我觉得必须有一个体面的方法来实现这一点。
基于Dana的回答,您可能希望作为一名装饰师:
然后。。。
使用
的增强版本decorator
模块然后。。。
要安装the ^{} module :
更新:有一个更好维护的重试库分支,名为tenacity,它支持更多功能,总体上更灵活。
是的,这里有一个retrying library,它有一个decorator,它实现了多种重试逻辑,您可以组合这些逻辑:
一些例子:
怎么样:
相关问题 更多 >
编程相关推荐