Django实现数据库长连接

开始接触Django只有一个多月的时间,而且一开始完全是在修改别人的代码,一个一个问题的改,感觉没怎么自己没太大的进步。最近来了一个新的需求: “让Django实现数据库长连接”,网上找了很多资料也没找到说名Django数据库长连接的,Django的文档也里里外外的找了一遍,可就是没提到 数据库长连接的。于是开始看Django内部数据库相关的代码,发现可以采用下述方式实现数据库长连接。

[python] view plain copy
  1. # Register an event that closes the database connection   
  2. # when a Django request is finished.   
  3. def  close_connection(**kwargs):  
  4.     for  conn  in  connections.all():  
  5.         conn.close()  
  6. signals.request_finished.connect(close_connection)  

上述是Django的一段数据库相关代码,可以在\django\db\__init__.py中找到。

如果不希望Django在每次请求结束以后都关闭所有的连接,可以将上述最后一行代码注释。

经 过测试,这样是可以达到保持连接的要求了。但是这种修改Django内部代码的方式过于霸道了,所以继续研究和最后一行代码相关的Signal对象,发现 其中还有一个disconnect方法,对应实现取消信号关联,所以可以采用在django项目中的__init__.py文件中加入如下代码来实现保持 数据库长连接的非非霸道操作

[python] view plain copy
  1. from  django.core  import  signals  
  2. from  django.db  import  close_connection  
  3.   
  4. # 取消信号关联,实现数据库长连接   
  5. signals.request_finished.disconnect(close_connection)  

然后在启动django项目以后就可以使数据库连接保持。好运吧!

ps: 经测试发现和gevent一起工作,connection会无限制增长

猜你喜欢

转载自san-yun.iteye.com/blog/1530089