在 Django 数据库连接丢失提到,利用心跳实现数据库连接持久化的方法。今天,我发现这样做,仍然会报数据库连接丢失。
原因在于对Django ORM对数据库连接的认识不够深入。实际上,Django ORM 为每一个线程都建立了一个数据库连接。而前面那个例子中的心跳是单独运行在一个线程中的,因此只能保证那一个线程不会超时释放。其它线程的数据库连接仍然会被释放。
我们可以用下面的SQL指令,直观的看到数据库的连接情况。
mysql> show full processlist;
因此,推荐的做法还是使用 close_old_connections()
,主动释放数据库连接。ORM需要的时候,会自己重新建立连接。
网友评论