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 04 Python
Python中if __name__ == '__main__'作用解析
Jun 29 Python
python字典基本操作实例分析
Jul 11 Python
结合Python的SimpleHTTPServer源码来解析socket通信
Jun 27 Python
Python制作Windows系统服务
Mar 25 Python
windows环境下tensorflow安装过程详解
Mar 30 Python
Python常用爬虫代码总结方便查询
Feb 25 Python
Python中Flask-RESTful编写API接口(小白入门)
Dec 11 Python
python分别打包出32位和64位应用程序
Feb 18 Python
导致python中import错误的原因是什么
Jul 01 Python
python的数学算法函数及公式用法
Nov 18 Python
Pandas 数据编码的十种方法
Apr 20 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/06/26 PHP
php网页病毒清除类
2014/12/08 PHP
PHP常用文件操作函数和简单实例分析
2016/06/03 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
2019/10/17 PHP
js 发个判断字符串是否为符合标准的函数
2009/04/27 Javascript
javascript new fun的执行过程
2010/08/05 Javascript
如何使用jQuery Draggable和Droppable实现拖拽功能
2013/07/05 Javascript
JS中FRAME的操作问题实例分析
2014/10/21 Javascript
javascript中eval函数用法分析
2015/04/25 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
AngularJS入门教程之静态模板详解
2016/08/18 Javascript
EasyUI Combobox设置默认值 获取text的方法
2016/11/28 Javascript
使用layer弹窗,制作编辑User信息页面的方法
2019/09/27 Javascript
在weex中愉快的使用scss的方法步骤
2020/01/02 Javascript
JS实现TITLE悬停长久显示效果完整示例
2020/02/11 Javascript
在vue中动态修改css其中一个属性值操作
2020/12/07 Vue.js
使用IPython下的Net-SNMP来管理类UNIX系统的教程
2015/04/15 Python
详解Python if-elif-else知识点
2018/06/11 Python
python elasticsearch从创建索引到写入数据的全过程
2019/08/04 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
2020/03/27 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
IE浏览器单独写CSS样式的几种方法
2014/10/14 HTML / CSS
css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
2016/12/06 HTML / CSS
用canvas显示验证码的实现
2020/04/10 HTML / CSS
英国知名的护肤彩妆与时尚配饰大型综合零售电商:Unineed
2016/11/21 全球购物
纽约香氛品牌:NEST Fragrance
2018/10/15 全球购物
编程实现当输入某产品代码则打印出该产品记录的功能
2014/05/03 面试题
Laravel中Kafka的使用详解
2021/03/24 PHP
工程资料员岗位职责
2014/03/10 职场文书
环保建议书600字
2014/05/14 职场文书
科长竞聘演讲稿
2014/05/16 职场文书
教师批评与自我批评(群众路线)
2014/10/15 职场文书
中班上学期个人总结
2015/02/12 职场文书
2015年专项整治工作总结
2015/04/03 职场文书
关于远足的感想
2015/08/10 职场文书
详解在SQLPlus中实现上下键翻查历史命令的功能
2022/03/18 SQL Server