Django多线程查询数据库连接失效问题

由于我的项目中使用了多线程查询数据库,而且MySQL数据库会有连接自动断开时间设置,导致一定时间后Django连接失效,访问间隔时间很长或并发量很低的项目会出现这个问题

(2006, 'MySQL server has gone away')

但是第二次请求,并不会出现这个问题,怀疑Django底层发现连接无效会把连接剔除。

而且由于Python的语言特性,主线程开启子线程,子线程抛出异常,控制台并不会出现异常信息,导致我很长一段时间以为没有异常抛出,但程序运行确实是出问题了,也是困惑了很久,但是Java语言并不会出现这种情况。

可使用以下命令查询MySQL断开连接的时间

show global variables like 'wait_timeout';
复制代码

使用下面命令设置超时时间,但不建议,无论设置多久,都会有超时的时候

set global wait_timeout=10
复制代码

可在Django查询数据库前使用以下代码关闭无效连接即可解决

django.db.close_old_connections()
复制代码