状态的近义词django中mysql连接池,Djangodb使⽤MySQL连接池
Django db使⽤MySQL连接池
Sep 25 2016
Django db模块本⾝不⽀持MySQL连接池,只有⼀个配置CONN_MAX_AGE连接最⼤存活时间,如果WSGI服务器使⽤了线程池技术,会达到连接复⽤的效果。但是如果WSGI服务如果是每个请求都创建新的线程,那么这个配置没有任何效果,因为连接保存在Thread.local()名称空间中,在不同的线程中不能复⽤。
贵族姓氏在上⼀篇greentor MySQL连接池实现中已经实现了MySQL连接池,只需要重写Django MySQL backend以⽀持连接池,就能达到连接复⽤的⽬的,减少socket 3次握⼿的开销,提⾼性能。
from django.sql.ba import (SafeText, SafeBytes, six,
DatabaWrapper as BaDatabaWrapper)
sql import ConnectionPool
class DatabaWrapper(BaDatabaWrapper):
u"""
⽀持greentor mysql connection pool 的backends
"""
pools = {} # 类变量⽤于保存所有不同数据库的连接
def get_new_connection(lf, conn_params):
# conn = t(**conn_params)
波波发型if not lf.alias in lf.pools: # 如果需要的数据库还没有连接池则新建连接池
唱给母亲的歌lf.pools[lf.alias] = ConnectionPool(mysql_params=conn_params)
conn = lf.pools[lf.alias].get_conn() # 获取新的连接时从连接池中获取
return conn
def _clo(lf):
浮云一别后
tion is not None: # 不再直接关闭连接,⽽是释放连接到连接池中
lf.pools[lf.alias].tion)
修改数据库配置引擎
1 DATABASES ={
2 'default': {消防安全讲话稿
少年中国说全文
3 'NAME': 'test',
4 'HOST': '127.0.0.1',承诺的英语
5 #'ENGINE': 'django.sql',
6 'ENGINE': 'core',
7 'USER': 'root',
8 'PASSWORD': '',
9 }10 }
连接池backend的代码虽然很少,但是在尝试过程中,基本把Django db模块的代码都过了⼀遍,感觉⾃⼰⼜⽜B了⼀点点,哈哈。