djangomysql的连接池

摘要:
第二个看起来不好,但它不取决于指定的版本。使用此方法,我们将受益于django的bug修改,它只是一个连接池层。DATABASES={'default':{'ENGINE‘:‘django_mysqlpool.backends.mysqlpool‘,‘NAME‘:‘db_NAME‘,‘USER‘:‘username‘,‘PASSWORD‘:’PASSWORD‘,‘HOST‘:“”,‘PORT‘:”,},}配置您可以定义池的执行和特定参数。当我们发现服务误用MySQL服务时,我们需要修复它。该线程服务器的问题详细描述如下:http://stackoverflow.com/questions/1303654/threaded-django-task-doesnt-automatically-handle-transactions-or-db-connections因此,此库提供了一个表单来帮助管理:fromdjango_mysqlpoolimportauto_close_db@auto_close_dbdeffunction_that_uses_db():MyModel.objects.all()。Delete()对于池,尽早和多次关闭连接是获得良好性能的关键,并且关闭的连接是可重用的。这将减少连接总数。

http://pypi.python.org/pypi/django-mysqlpool/0.1-7
一个 SmartFile 的开源项目

介绍

这是一个简单的mysql连接池的数据库后端。这个后端实现源于Ed Menendez的一个博客文章:
http://menendez.com/blog/mysql-connection-pooling-django-and-sqlalchemy/
和博客有两个不同:
1.工作已经替你完成。
2.我们不是复制出django的mysql后端,我们只是monkey-patch(不修改源码的基础上扩展)它。

第二种看起来不好,但是它不依赖指定的版本中,用这个方法让我们将受益django的bug修改,这只是一个连接池层(一个单独进程)。

这个pooling使用SQLAlchemy。它不完美但非常有用(这个后端是一个单独的进程)它主要解决的问题是为一个进程提供限定的连接。

用法

用下面的配置取代默认的后端配置。

DATABASES = {
    'default': {
        'ENGINE': 'django_mysqlpool.backends.mysqlpool',
        'NAME': 'db_name',
        'USER': 'username',
        'PASSWORD': 'password',
        'HOST': '',
        'PORT': '',
    },
}

配置

你可以定义池的执行和特定的参数。参数的定义自己看SQLAlchemy的文档

        MYSQLPOOL_BACKEND - pool 实现的名字 (默认'QueuePool').
        MYSQLPOOL_ARGUMENTS - 给 pool传递的参数

这个例子,使用不适用本地线程的QueuePool ,你可以使用下面的配置:

MYSQLPOOL_BACKEND = 'QueuePool'
MYSQLPOOL_ARGUMENTS = {
    'use_threadlocal': False,
}

关闭连接


这里和直接关闭连接池不会直接操作。在你开始连接池后,关闭就显得很重要了。

当你处理一个线程应用的时候就产生了依赖。就像一台服务器,它创建和你多线程处理当前操作。每个线程都保持数据库连接,一旦我们开始连接池,这个服务器会很快的用尽连接池数目限制。

这个看起来是一个失败,但是它很成功。我们实现指定每个进程一个确切的连接数量。这个防止任何进程影响别的服务,将全局问题限制到本地问题。当我们发现有一个服务滥用mysql服务,我们就要修复它。

这个线程服务器的问题详细描述如下:
http://stackoverflow.com/questions/1303654/threaded-django-task-doesnt-automatically-handle-transactions-or-db-connections

因此,这个库提供了一个帮助管理的形式:

from django_mysqlpool import auto_close_db

@auto_close_db
def function_that_uses_db():
    MyModel.objects.all().delete()

   
对于pooling,关闭连接及早和多次是一个好性能的关键,关闭的连接是可重用的。这样连接总数会下降。我们一般在QueuePool模式下需要use_threadlocal 。让线程共享相同的连接。一旦我们共享连接,服务使用比线程数少的连接。

免责声明:文章转载自《djangomysql的连接池》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇kubernetes 部署 traefik 以及kubernetes dashboradmaven私服-配置本地私服环境之jar包下载环境搭建下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Jdk1.8 JUC源码解析(1)-atomic-AtomicXXX

目录     一、Unsafe简介 在正式的开讲 juc-atomic框架系列之前,有必要先来了解下Java中的Unsafe类。 Unsafe类,来源于sun.misc包。该类封装了许多类似指针操作,可以直接进行内存管理、操纵对象、阻塞/唤醒线程等操作。Java本身不直接支持指针的操作,所以这也是该类命名为Unsafe的原因之一。 J.U.C中的许多CA...

c3p0配置详解

数据库连接池C3P0框架是个非常优异的开源jar,高性能的管理着数据源,这里只讨论程序本身负责数据源,不讨论容器管理。 一、实现方式: C3P0有三种方式实现: 1.自己动手写代码,实现数据源 例如:在类路径下配置一个属性文件,config.properties,内容如下: driverClass=xxx jdbcUrl=xxx user=xxx pass...

SpringBoot整合redis哨兵主从服务

前提环境:   主从配置  http://www.cnblogs.com/zwcry/p/9046207.html   哨兵配置  https://www.cnblogs.com/zwcry/p/9134721.html 1.配置pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xm...

虚拟化技术实现 — KVM 的 CPU 虚拟化

目录 文章目录 目录 前文列表 x86 体系结构的虚拟化 硬件辅助的 CPU 虚拟化 由 VMX 切换支撑的 CPU 虚拟化技术 KVM 的 CPU 虚拟化实现 vCPU 的调度方式 客户机 CPU 拓扑和模型 虚拟机 vCPU 数量分配原则 总结 参考文档 前文列表 《虚拟化技术实现 — 虚拟化技术发展编年史》《虚拟化技术实现 — QEMU-...

java问题排查工具之一板斧jstack——使用 jstack 定位 java进程CPU过高的问题

 jstack主要用来查看某个Java进程内的线程堆栈信息。语法格式如下: jstack [option] pid jstack [option] executable core jstack [option] [server-id@]remote-hostname-or-ip 参数说明: -l long listings,会打印出额外的锁...

Neety的基础使用及说明

BIO(缺乏弹性伸缩能力,并发量小,容易出现内存溢出,出现宕机每一个客户端对应一个线程 伪异步IO:创建线程池,由线程池里边的线程负责连接处理,M个个请求进来时,会在线程池创建N个线程。容易出现线程池阻塞。由一个线程池来处理客户端的请求。 NIO:异步非阻塞,服务器实现模式为一个请求一个线程,客户端发送的连接请求都会注册到多路复用器上,多路...