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基础教程之popen函数操作其它程序的输入和输出示例
Feb 10 Python
python网络爬虫采集联想词示例
Feb 11 Python
解决Django模板无法使用perms变量问题的方法
Sep 10 Python
解决pip install xxx报错SyntaxError: invalid syntax的问题
Nov 30 Python
解决python3中cv2读取中文路径的问题
Dec 05 Python
python 提取tuple类型值中json格式的key值方法
Dec 31 Python
python利用小波分析进行特征提取的实例
Jan 09 Python
python+Django实现防止SQL注入的办法
Oct 31 Python
在Python中使用MySQL--PyMySQL的基本使用方法
Nov 19 Python
使用Python实现牛顿法求极值
Feb 10 Python
Pycharm同步远程服务器调试的方法步骤
Nov 04 Python
python如何调用php文件中的函数详解
Dec 29 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和mysql中uft-8中文编码乱码的几种解决办法
2012/04/19 PHP
php实现的漂亮分页方法
2014/04/17 PHP
PHP+memcache实现消息队列案例分享
2014/05/21 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
2014/06/25 PHP
php实现数组中索引关联数据转换成json对象的方法
2015/07/08 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
PHP中关键字interface和implements详解
2017/06/14 PHP
一个高效的JavaScript压缩工具下载集合
2007/03/06 Javascript
setTimeout 不断吐食CPU的问题分析
2009/04/01 Javascript
JavaScript类和继承 constructor属性
2010/03/04 Javascript
Jquery常用技巧收集整理篇
2010/11/14 Javascript
javascript 数组排序函数sort和reverse使用介绍
2013/11/21 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
2016/11/25 Javascript
详解JavaScript中数组的reduce方法
2016/12/02 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
jQuery+CSS实现的table表格行列转置功能示例
2018/01/08 jQuery
webpack+vue+express(hot)热启动调试简单配置方法
2018/09/19 Javascript
Vue实现本地购物车功能
2018/12/05 Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
2019/03/01 Javascript
微信小程序音乐播放器开发
2019/11/20 Javascript
微信小程序实现抖音播放效果的实例代码
2020/04/11 Javascript
在Python中操作时间之tzset()方法的使用教程
2015/05/22 Python
python执行精确的小数计算方法
2019/01/21 Python
python实现的多任务版udp聊天器功能案例
2019/11/13 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
python @propert装饰器使用方法原理解析
2019/12/25 Python
解决Python pip 自动更新升级失败的问题
2020/02/21 Python
后端开发使用pycharm的技巧(推荐)
2020/03/27 Python
在django admin中配置搜索域是一个外键时的处理方法
2020/05/20 Python
优秀毕业生求职信范文
2014/01/02 职场文书
收款授权委托书
2014/10/02 职场文书
2014镇党委书记党建工作汇报材料
2014/11/02 职场文书
同学聚会通知短信
2015/04/20 职场文书
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技