Python 使用 PyMysql、DBUtils 创建连接池提升性能


Posted in Python onAugust 14, 2019

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

解决方案:DBUtils

DBUtils 是一套 Python 数据库连接池包,并允许对非线程安全的数据库接口进行线程安全包装。DBUtils 来自 Webware for Python 。

原理:

Python 使用 PyMysql、DBUtils 创建连接池提升性能

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

例子

import pymysql
from DBUtils.PooledDB import PooledDB
pool = PooledDB(pymysql,5,host='ip',user='user',passwd='passwd',db='db',port=3306,setsession=['SET AUTOCOMMIT = 1']) # 5为连接池里的最少连接数,setsession=['SET AUTOCOMMIT = 1']是用来设置线程池是否打开自动更新的配置,0为False,1为True
conn = pool.connection() #以后每次需要数据库连接就是用connection()函数获取连接就好了
cur=conn.cursor()
SQL="select * from table"
count=cur.execute(SQL)
results=cur.fetchall()
cur.close()
conn.close()

PooledDB 的参数:

POOL = PooledDB(
creator=pymysql, # 使用链接数据库的模块
maxconnections=6, # 连接池允许的最大连接数,0和None表示不限制连接数
mincached=2, # 初始化时,链接池中至少创建的空闲的链接,0表示不创建
maxcached=5, # 链接池中最多闲置的链接,0和None不限制
maxshared=1, # 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,因为pymysql和MySQLdb等模块的 threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。
blocking=True, # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
maxusage=None, # 一个链接最多被重复使用的次数,None表示无限制
setsession=[], # 开始会话前执行的命令列表。如:[“set datestyle to …”, “set time zone …”]
ping=0,
# ping MySQL服务端,检查是否服务可用。
# 如:0 = None = never,
# 1 = default = whenever it is requested,
# 2 = when a cursor is created,
# 4 = when a query is executed,
# 7 = always
host=‘127.0.0.1',
port=3306,
user=‘root',
password='',
database=‘ziji',
charset=‘utf8'
)

在 uwsgi 中,每个 http 请求都会分发给一个进程,连接池中配置的连接数都是一个进程为单位的(即上面的最大连接数,都是在一个进程中的连接数),而如果业务中,一个 http 请求中需要的 sql 连接数不是很多的话(其实大多数都只需要创建一个连接),配置的连接数配置都不需要太大。

连接池对性能的提升表现在:

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

总结

以上所述是小编给大家介绍的Python 使用 PyMysql、DBUtils 创建连接池提升性能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
centos下更新Python版本的步骤
Feb 12 Python
python实现人人网登录示例分享
Jan 19 Python
python通过文件头判断文件类型
Oct 30 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
Sep 19 Python
Python实现FTP弱口令扫描器的方法示例
Jan 31 Python
python利用Opencv实现人脸识别功能
Apr 25 Python
通过cmd进入python的实例操作
Jun 26 Python
django settings.py 配置文件及介绍
Jul 15 Python
解决Keras自带数据集与预训练model下载太慢问题
Jun 12 Python
Pytorch 使用CNN图像分类的实现
Jun 16 Python
python闭包与引用以及需要注意的陷阱
Sep 18 Python
Python scrapy爬取起点中文网小说榜单
Jun 13 Python
Python学习笔记之For循环用法详解
Aug 14 #Python
Python学习笔记之Zip和Enumerate用法实例分析
Aug 14 #Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
Aug 14 #Python
使用python写的opencv实时监测和解析二维码和条形码
Aug 14 #Python
用python3 urllib破解有道翻译反爬虫机制详解
Aug 14 #Python
使用Python实现图像标记点的坐标输出功能
Aug 14 #Python
python2爬取百度贴吧指定关键字和图片代码实例
Aug 14 #Python
You might like
收藏的PHP常用函数 推荐收藏保存
2010/02/21 PHP
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
7个超级实用的PHP代码片段
2011/07/11 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
如何实现JS函数的重载
2006/09/22 Javascript
jQuery div层的放大与缩小简单实现代码
2013/03/28 Javascript
jquery实现图片左右间隔滚动特效(可自动播放)
2013/05/08 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
js创建元素(节点)示例
2014/01/02 Javascript
用js代码和插件实现wordpress雪花飘落效果的四种方法
2014/12/15 Javascript
高性能JavaScript 重排与重绘(2)
2015/08/11 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
javascript产生随机数方法汇总
2016/01/25 Javascript
举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
2016/07/07 Javascript
Canvas实现动态的雪花效果
2017/02/13 Javascript
微信小程序开发animation心跳动画效果
2017/08/16 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
从零开始搭建vue移动端项目到上线的步骤
2018/10/15 Javascript
jQuery选择器之基本选择器用法实例分析
2019/02/19 jQuery
jquery实现购物车基本功能
2019/10/25 jQuery
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
Python中类的定义、继承及使用对象实例详解
2015/04/30 Python
Python对文件操作知识汇总
2016/05/15 Python
python实现读取并显示图片的两种方法
2017/01/13 Python
python快排算法详解
2019/03/04 Python
使用Django实现把两个模型类的数据聚合在一起
2020/03/28 Python
Python几种常见算法汇总
2020/06/02 Python
Skyscanner英国:苏格兰的全球三大领先航班搜索服务之一
2017/11/09 全球购物
iPad和Surface Pro蓝牙键盘:Brydge
2018/11/10 全球购物
前台文员我鉴定
2014/01/12 职场文书
30岁生日感言
2014/01/25 职场文书
商务宴请邀请函范文
2015/02/02 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python