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 相关文章推荐
Python中的异常处理相关语句基础学习笔记
Jul 11 Python
详解使用python crontab设置linux定时任务
Dec 08 Python
python实现画一颗树和一片森林
Jun 25 Python
Python读取数据集并消除数据中的空行方法
Jul 12 Python
pandas去重复行并分类汇总的实现方法
Jan 29 Python
值得收藏的10道python 面试题
Apr 15 Python
Python Selenium 设置元素等待的三种方式
Mar 18 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
Jan 05 Python
Pytorch之扩充tensor的操作
Mar 04 Python
python3 hdf5文件 遍历代码
May 19 Python
python playwright 自动等待和断言详解
Nov 27 Python
Python实现视频中添加音频工具详解
Dec 06 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实现下载生成某链接快捷方式的解决方法
2013/05/07 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
ThinkPHP之import方法实例详解
2014/06/20 PHP
destoon公司主页模板风格的添加方法
2014/06/20 PHP
php随机抽奖实例分析
2015/03/04 PHP
php 魔术常量详解及实例代码
2016/12/04 PHP
Laravel多域名下字段验证的方法
2019/04/04 PHP
laravel-admin 在列表页添加自定义按钮的例子
2019/09/30 PHP
类之Prototype.js学习
2007/06/13 Javascript
JavaScript 对Cookie 操作的封装小结
2009/12/31 Javascript
div层的移动及性能优化
2010/11/16 Javascript
js中查找最近的共有祖先元素的实现代码
2010/12/30 Javascript
JavaScript使用cookie记录临时访客信息的方法
2015/04/07 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
AngularJS 让人爱不释手的八种功能
2016/03/23 Javascript
浅析JS动态创建元素【两种方法】
2016/04/20 Javascript
jQuery基于扩展实现的倒计时效果
2016/05/14 Javascript
JavaScript中return用法示例
2016/11/29 Javascript
bootstrap weebox 支持ajax的模态弹出框
2017/02/23 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
记录vue项目中遇到的一点小问题
2019/05/14 Javascript
解决layUI的页面显示不全的问题
2019/09/20 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
python使用PyGame模块播放声音的方法
2015/05/20 Python
Python爬虫实战:分析《战狼2》豆瓣影评
2018/03/26 Python
python利用thrift服务读取hbase数据的方法
2018/12/27 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
Python pandas用法最全整理
2019/08/04 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
使用canvas来完成线性渐变和径向渐变的功能的方法示例
2019/07/25 HTML / CSS
啤酒销售实习自我鉴定
2013/09/24 职场文书
求职者应聘的自我评价
2013/10/16 职场文书
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
带你学习MySQL执行计划
2021/05/31 MySQL
SqlServer数据库远程连接案例教程
2021/07/15 SQL Server