django中的gevent友好数据库连接池

django-db-conn-pool的Python项目详细描述


多亏了sqlalchemy,我们可以在使用gevent的monkey补丁的同时将数据库连接池化。

它支持mysql,并在python 2.7、django 1.11、gevent 1.2和sqlalchemy 1.2下进行了测试。

此外,DjangoQueuePool是一个新的队列池,扩展了sqlalchemy的QueuePool

  • 重新使用突发流量溢出的数据库连接;
  • 随着时间的推移,逐渐停用未使用的数据库连接。

请记住关闭不可用或过时的数据库连接:

  • 关闭的连接将返回到池;
  • 建议在任务完成后关闭它们。
  • 如果可能,建议将CONN_MAX_AGE设置为0
  • 如果CONN_MAX_AGE0,则连接将总是过时的。
fromdjango.dbimportconnectionsforconninconnections.all():conn.close_if_unusable_or_obsolete()

开始

  • 安装数据库连接池
pip install django-db-conn-pool
  • 将池添加到django数据库后端
DATABASES={'default':{'ENGINE':'django_db_conn_pool.mysqlalchemy','CONN_MAX_AGE':0,'POOL':db_conn_pool,...}}
  • 选择并调整连接池参数
fromsqlalchemy.poolimportQueuePoolfromdjango_db_conn_pool.mysqlalchemy.poolimportDjangoQueuePooldb_conn_pool=slow_and_safe={'django_pool_class':QueuePool,# sqlalchemy's builtin queue pool class'django_pre_ping':True,# pre ping by django if dialect is None'django_reset_on_return':False,# use sqlalchemy's reset on conn return'pool_size':5,# daily traffic: reuse long connections'max_overflow':0,# burst traffic: do not overload the db'timeout':30,# burst traffic: > external api timeout'recycle':120,# should be smaller than mysql timeout'dialect':None,# sqlalchemy's mysql dialect instance'pre_ping':False,# sqlalchemy pre ping requires dialect'use_threadlocal':True,# every thread always get its same conn'reset_on_return':'rollback',# reset on every conn return by rollback}db_conn_pool=fast_and_sane={'django_pool_class':QueuePool,# sqlalchemy's builtin queue pool class'django_pre_ping':False,# no pre ping due to long mysql timeout'django_reset_on_return':True,# reset by rollback only when necessary'pool_size':5,# daily traffic: reuse long connections'max_overflow':10,# burst traffic: do not overload the db'timeout':30,# burst traffic: > external api timeout'recycle':3600,# to be much smaller than mysql timeout'dialect':None,# sqlalchemy's mysql dialect instance'pre_ping':False,# sqlalchemy pre ping requires dialect'use_threadlocal':False,# diff threads share the db connections'reset_on_return':None,# do not use sqlalchemy reset on return}db_conn_pool=fast_and_wild={'django_pool_class':DjangoQueuePool,# customized from sqlalchemy queue pool'django_pre_ping':False,# no pre ping due to long mysql timeout'django_reset_on_return':True,# reset by rollback only when necessary'django_core_pool_size':5,# retire no conn if achieving core size'django_unload_timeout':2,# wait some random time before overload'django_retire_interval':5,# retire few non-core conn per interval'django_retire_quantity':1,# retire few non-core conn per interval'pool_size':30,# daily traffic: recycle or retire conn'max_overflow':0,# burst traffic: put overflow into pool'timeout':30,# burst traffic: > external api timeout'recycle':3600,# to be much smaller than mysql timeout'dialect':None,# sqlalchemy's mysql dialect instance'pre_ping':False,# sqlalchemy pre ping requires dialect'use_threadlocal':False,# diff threads share the db connections'reset_on_return':None,# do not use sqlalchemy reset on return}

发布历史记录

1.0.0(2019-05-04)

  • 生日

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在Java中为上传的文件设计强制的文件夹结构   java我如何在下面的代码中解决这个>错误HTTP Status 404   java如何在方面字段Lucene上添加分页   java My 安卓应用程序在尝试10次后崩溃   java“找不到Spring NamespaceHandler”错误   连接到Dynamodb时发生java AWS lambda错误   过程的价值。JAVA中的exitValue()   eclipse vscode java正在尝试设置项目   JavaEclipse不再自动在javadocs中添加标签   java找不到LoggerFactory类   在Java中实现延迟   设置onClickListener时的java NullPointerException   用jsoup解析HTML:Android和Java的区别