问题原因:
Mysql的wait_timeout默认是8个小时( 查看语句:show variables like '%timeout%';),而我的定时任务是24小时执行一次,且一次执行需要的时间很短,当第一次执行的时候,Django和Mysql建立的一个连接会自动保持8小时的连接,但是8小时之后Mysql会断开这个连接,再次执行任务的时候Django还用上次的连接去连接mysql,因此得到一个 MySQL server has gone away 的结果。
解决办法:
在Django进行数据库处理(do_my_work)之前,就主动关闭Django到Mysql的数据库连接,然后重新建立一个来查询,具体代码如下:
from django.db import connection
def is_connection_usable():
try:
connection.connection.ping()
except:
return False
else:
return True
def do_my_work():
if not is_connection_usable():
connection.close()
try:
pass //执行数据库相关操作
except:
print("Something bad happened!")