连接池来由
python编程中可以使用MySQLdb进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接mysql数据库请求时,都是独立的去请求访问,相当浪费资源,而且访问数量达到一定数量时,对mysql的性能会产生较大的影响。因此,实际使用中,通常会使用数据库的连接池技术,来访问数据库达到资源复用的目的。

连接池的工作原理
连接池的工作原理主要由三部分组成,分别为连接池的建立、连接池中连接的使用管理、连接池的关闭。

第一、连接池的建立。一般在系统初始化时,连接池会根据系统配置建立,并在池中创建了几个连接对象,以便使用时能从连接池中获取。连接池中的连接不能随意创建和关闭,这样避免了连接随意建立和关闭造成的系统开销。Java中提供了很多容器类可以方便的构建连接池,例如Vector、Stack等。

第二、连接池的管理。连接池管理策略是连接池机制的核心,连接池内连接的分配和释放对系统的性能有很大的影响。其管理策略是:

当客户请求数据库连接时,首先查看连接池中是否有空闲连接,如果存在空闲连接,则将连接分配给客户使用;如果没有空闲连接,则查看当前所开的连接数是否已经达到最大连接数,如果没达到就重新创建一个连接给请求的客户;如果达到就按设定的最大等待时间进行等待,如果超出最大等待时间,则抛出异常给客户。 当客户释放数据库连接时,先判断该连接的引用次数是否超过了规定值,如果超过就从连接池中删除该连接,否则保留为其他客户服务。

该策略保证了数据库连接的有效复用,避免频繁的建立、释放连接所带来的系统资源开销。

第三、连接池的关闭。当应用程序退出时,关闭连接池中所有的连接,释放连接池相关的资源,该过程正好与创建相反。

python中连接池的实现
DBUtils是一套Python数据库连接池包,DBUtils提供两种外部接口:

  • PersistentDB :提供线程专用的数据库连接,并自动管理连接。
  • PooledDB :提供线程间可共享的数据库连接,并自动管理连接。

实测证明 PersistentDB 的速度是最高的,但是在某些特殊情况下,数据库的连接过程可能异常缓慢,而此时的PooledDB则可以提供相对来说平均连接时间比较短的管理方式。

使用方法
连接池对象只初始化一次,一般可以作为模块级代码来确保。 PersistentDB的连接例子:

import DBUtils.PersistentDB
persist=DBUtils.PersistentDB.PersistentDB(dbpai=MySQLdb,maxusage=1000,**kwargs)

这里的参数dbpai指使用的底层数据库模块,兼容DB-API的。maxusage则为一个连接最大使用次数,参考了官方例子。后面的**kwargs则为实际传递给MySQLdb的参数。

获取连接: conn=persist.connection() 实际编程中用过的连接直接关闭 conn.close() 即可将连接交还给连接池。

PooledDB使用方法同PersistentDB,只是参数有所不同。

import pymysql
from DBUtils.PooledDB import PooledDBMYSQL_HOST = 'localhost'
USER = 'root'
PASSWORD = 'root'
DB = 'python3'
PORT = 3306pool = PooledDB(pymysql, 5, host=MYSQL_HOST, user=USER, passwd=PASSWORD, db=DB, port=PORT)  # 5为连接池里的最少连接数conn = pool.connection()  # 以后每次需要数据库连接就是用connection()函数获取连接就好了
cur = conn.cursor()
SQL = "select * from url_file_path500 limit 3"
r = cur.execute(SQL)
re = cur.fetchall()
print(re)
cur.close()
conn.close()

PooledDB的参数:

  1. mincached,最少的空闲连接数,如果空闲连接数小于这个数,pool会创建一个新的连接
  2. maxcached,最大的空闲连接数,如果空闲连接数大于这个数,pool会关闭空闲连接
  3. maxconnections,最大的连接数,
  4. blocking,当连接数达到最大的连接数时,在请求连接的时候,如果这个值是True,请求连接的程序会一直等待,直到当前连接数小于最大连接数,如果这个值是False,会报错,
  5. maxshared 当连接数达到这个数,新请求的连接会分享已经分配出去的连接

连接池对性能的提升表现在:
1.在程序创建连接的时候,可以从一个空闲的连接中获取,不需要重新初始化连接,提升获取连接的速度
2.关闭连接的时候,把连接放回连接池,而不是真正的关闭,所以可以减少频繁地打开和关闭连接

参考:
Python实现MySQL连接池
python中实现mysql连接池
Python数据库连接池DBUtils.PooledDB
PersistentDB和PooledDB对比

python实现连接池技术相关推荐

  1. java 连接池技术_java数据库连接池技术原理(浅析)

    在执行数据库SQL语句时,我们先要进行数据连接:而每次创建新的数据库的连接要消耗大量的资源,这样,大家就想出了数据库连接池技术.它的原理是,在运行过程中,同时打开着一定数量的数据库连接,形成数据连接池 ...

  2. JDBC实例--JDBC连接池技术解密,连接池对我们不再陌生

    一.为什么我们要用连接池技术? 前面的数据库连接的建立及关闭资源的方法有些缺陷.统舱传统数据库访问方式:一次数据库访问对应一个物理连接,每次操作数据库都要打开.关闭该物理连接, 系统性能严重受损. 解 ...

  3. 走进JavaWeb技术世界3:JDBC的进化与连接池技术

    网络访问 随着 Oracle, Sybase, SQL Server ,DB2,  Mysql 等人陆陆续续住进数据库村, 这里呈现出一片兴旺发达的景象, 无数的程序在村里忙忙碌碌, 读写数据库,   ...

  4. DBCP和C3P0实现连接池技术

    DBCP和C3P0实现连接池技术 本文是基于Windows 10系统环境,学习和使用连接池技术: Windows 10 MyEclipse 10 DCBP C3P0 一.连接池技术的基本概念 (1) ...

  5. c3p0连接池技术和Druid连接池技术比较

    开发中经常遇到使用c3p0技术和Druid技术建立的工具类JDBCUtils, 下面将对这两种技术进行简单的介绍. java程序与数据库数据交互的步骤 1. 首先需要与数据库建立连接, 即完成驱动注册 ...

  6. Druid 德鲁伊连接池技术

    Druid 德鲁伊连接池技术 步骤: 去官网去下载一个德鲁伊的jar -> druid-1.0.9.jar 定义配置文件:使用properties文件类型的,名字随便起 手动加载配置文件信息: ...

  7. python - DBUtils 连接池减少oracle数据库的连接数

    问题: 接到需求,告知项目的oracle连接次数过多,对系统造成太过大的负担,要求减少oracle数据库的连接次数 分析: 仔细分析代码以后,发现产生问题的原因,在于之前要求提升oracle监控的监控 ...

  8. 连接池技术 Connection Pooling

    原创地址:http://www.cnblogs.com/jfzhu/p/3705703.html 转载请注明出处 和数据库建立一个物理连接是一个很耗时的任务,所以无论是ADO.NET还是J2EE都提供 ...

  9. python oracle连接池_【Python + Oracle】Python Oracle连接池—改进版

    Oracle 连接池第四版. 编程语言 Python 语言版本 3.5.3 实现功能 oracle 连接池,解决频繁连接oracle数据库带来的连接资源耗费问题 程序托管 GitHub-OracleP ...

  10. python oracle连接池_python - DBUtils 连接池减少oracle数据库的连接数

    问题: 接到需求,告知项目的oracle连接次数过多,对系统造成太过大的负担,要求减少oracle数据库的连接次数 分析: 仔细分析代码以后,发现产生问题的原因,在于之前要求提升oracle监控的监控 ...

最新文章

  1. 服务器断电重启修复,WIN取消100M隐藏分区、异常断电后绕过修复模式
  2. c5a电池_手机锂电池基本性能科普和参数测试
  3. 加入新的地方,要开始积累了
  4. 每天一道LeetCode-----移除有序链表中的重复节点
  5. angular js环境配置
  6. 十三种技术文档模板_帮助企业制作帮助文档的6大“黑科技”工具!
  7. java关键字定义字符变量_Java 关键字和标识符
  8. python 视频下载中国大学慕课_中国大学慕课视频下载
  9. zip和rar压缩文件的区别
  10. python判断火车票座位_用Python实现火车票查询(含票价版)
  11. UE4 编辑器脚本-批量创建LOD
  12. Debian/Kali possible missing /lib/firmware/i915.... 的解决办法
  13. 《正面管教》读后感_20171219
  14. 体脂秤里的测脂模块方案,测量体脂全靠它?
  15. python清洗数据教程_数据分析入门系列教程-数据清洗
  16. micropython 常量_MicroPython添加Module(二)
  17. 16个核心概念带你入门 Kubernetes
  18. 电影「哪吒之魔童降世」免 费 高 清 完 整 版 在 线 观 看
  19. 功能点算法及在软件测试中的应用
  20. C++之适配器(Adapter)模式

热门文章

  1. SparkCore-CacheAndCheckpoint-6
  2. php接收表单post数据由于数据字段太多导致丢失的案例
  3. iOS 网络与多线程--3.异步Get方式的网络请求(非阻塞)
  4. 程序员的恶性循环:加班-没空学习-老是写同等水平代码-无法提升代码质量-老是出BUG-老是需要修改-加班-......
  5. 甲骨文公司总部Oracle技术沙龙《Hadoop》邀请函-2013.8.31(周六)
  6. Linux 下把服务设置自启动
  7. .Net客户端应用程序开发
  8. python载入图片序列_python – 使用matplotlib显示图像序列
  9. python 连接数据库 慢_python自动结束mysql慢查询会话的实例代码
  10. git配置ssh私钥_GitLab 配置