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发送伪造的arp请求
Jan 09 Python
Python pickle类库介绍(对象序列化和反序列化)
Nov 21 Python
Python实现命令行通讯录实例教程
Aug 18 Python
浅谈flask中的before_request与after_request
Jan 20 Python
Python使用xlwt模块操作Excel的方法详解
Mar 27 Python
修改默认的pip版本为对应python2.7的方法
Nov 06 Python
Django model select的多种用法详解
Jul 16 Python
在PyTorch中Tensor的查找和筛选例子
Aug 18 Python
PyTorch: Softmax多分类实战操作
Jul 07 Python
用python实现一个简单计算器(完整DEMO)
Oct 14 Python
Python做图像处理及视频音频文件分离和合成功能
Nov 24 Python
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
Aug 30 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正则表达式(regar expression)
2011/09/10 PHP
smarty模板引擎之配置文件数据和保留数据
2015/03/30 PHP
php抓取并保存网站图片的实现代码
2015/10/28 PHP
joomla数据库操作示例代码
2016/01/06 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
PHP递归实现汉诺塔问题的方法示例
2017/11/25 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
TextArea 控件的最大长度问题(js json)
2009/12/16 Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
2011/11/15 Javascript
JS性能优化笔记搜索整理
2013/08/21 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
2013/11/13 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
jQuery中slideUp()方法用法分析
2014/12/24 Javascript
JavaScript设计模式之装饰者模式介绍
2014/12/28 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
2015/11/16 Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
2017/03/09 Javascript
Cookies 和 Session的详解及区别
2017/04/21 Javascript
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
vue-devtools的安装步骤
2018/04/23 Javascript
JS尾递归的实现方法及代码优化技巧
2019/01/19 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
2019/08/01 Javascript
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
Python构造自定义方法来美化字典结构输出的示例
2016/06/16 Python
PyCharm+PySpark远程调试的环境配置的方法
2018/11/29 Python
Python魔法方法功能与用法简介
2019/04/04 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
Django中FilePathField字段的用法
2020/05/21 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
jupyter使用自动补全和切换默认浏览器的方法
2020/11/18 Python
AmazeUI框架搭建的方法步骤(图文)
2020/08/17 HTML / CSS
Lacoste美国官网:经典POLO衫品牌
2016/10/12 全球购物
优衣库美国官网:UNIQLO美国
2018/04/14 全球购物
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
印度排名第一的蛋糕、鲜花和礼品送货:Winni
2019/08/02 全球购物
小学教师教学反思
2016/02/24 职场文书
Python安装及建立虚拟环境的完整步骤
2022/06/25 Servers