pymysql在很长一段时间后丢失了连接

时间:2013-08-06 09:09:53

标签: mysql python-3.x tornado pymysql

使用pymysql连接到mysql,让程序运行很长时间,例如,晚上离开办公室并在第二天早上回来。在此期间,对此应用程序没有任何操作。现在做数据库提交会给这个错误。

  File "/usr/local/lib/python3.3/site-packages/pymysql/cursors.py", line 117, in execute
    self.errorhandler(self, exc, value)
  File "/usr/local/lib/python3.3/site-packages/pymysql/connections.py", line 189, in defaulterrorhandler
    raise errorclass(errorvalue)

pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')

重新启动网络服务器(龙卷风),没关系。为什么如果长时间离开会出现此错误?

1 个答案:

答案 0 :(得分:4)

wait_timeout存在的原因是:长时间的空闲连接浪费了有限的服务器资源。你是对的:增加它不是正确的方法。

幸运的是,这是一个具有强大异常机制的Python。我不熟悉pymysql但是大概你在某个地方有一个“open_connection”方法

try:
    cursor.do_something()
except pymysql.err.OperationalError as e:
    if e[0] == 2013: # Lost connection to server 
        # redo open_connection and do_something
    else:
        raise 

由于您没有发布任何调用代码,因此我无法构造此示例以匹配您的应用程序。有关except子句的事情值得注意:首先是它们应该尽可能地缩小,在这种情况下(可能)有许多操作错误,你只知道如何处理'丢失连接'。

如果它不是丢失的连接异常,你应该重新提升它,以免它被吞没。除非您知道如何处理其他的OperationalErrors,否则这将被传递到堆栈并导致信息性的错误消息,这是合理的事情,因为到那时光标可能无用。

重新启动Web服务器只会将丢失的连接修复为重新初始化所有内容的意外副作用;处理代码中的异常是实现目标的一种更温和的方式。