python调用libs.dbutil_Python 使用 PyMysql、DBUtils 创建连接池,提升性能
Python 编程中可以使用 PyMysql 进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接 MySQL 数据库请求时,都是独立的去请求访问,相当浪费资源,而且访问数量达到一定数量时,对 mysql 的性能会产生较大的影响。因此,实际使用中,通常会使用数据库的连接池技术,来访问数据库达到资源复用的目的。
解决方案:DBUtils
DBUtils 是一套 Python 数据库连接池包,并允许对非线程安全的数据库接口进行线程安全包装。DBUtils 来自 Webware for Python 。
原理:
在程序创建连接的时候,可以从一个空闲的连接中获取,不需要重新初始化连接,提升获取连接的速度
关闭连接的时候,把连接放回连接池,而不是真正的关闭,所以可以减少频繁地打开和关闭连接
例子
importpymysqlfrom DBUtils.PooledDB importPooledDB
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调用libs.dbutil_Python 使用 PyMysql、DBUtils 创建连接池,提升性能相关推荐
- DBUtils、连接池
1.DBUtils 它是JDBC的简化开发工具包 需项目导入commons-dbutils-1.6.jar 3个核心功能: QuerryRunner:提供对SQL语句操作的API ResultSetH ...
- [Day30] DBUtils和连接池
1. DBUtils-JDBC的简化开发工具包 1.1 概述 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码 ...
- java beanlisthandler_Java篇-DBUtils与连接池
一 : DBUtils DBUtils就是为了简化JDBC的快发而产生的开发工具包.对JDBC的一种封装. 核心功能 1. QueryRunner 中提供对sql语句操作的API update(Con ...
- 多线程情况下创建连接池
JAVA数据库连接池实现 博客分类: • 数据库连接池 JAVA数据库连接池连接池原理连接池实现JAVA连接池 连接池的管理用了了享元模式,这里对连接池进行简单设计. 一.设计思路 1.连接池配置属性 ...
- nodejs mysql 创建连接池
用Nodejs连接MySQL 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javas ...
- python调用ping命令_我可以创建一个脚本来测试是否可以在python服务器上远程使用SSH和PING命令吗? - python...
我可以创建脚本来测试是否可以在python中远程使用服务器上的SSH和PING命令吗? 参考方案 好的,这是Python3和Linux的示例.只需记住,您的目标主机/服务器必须正在运行SSH服务器才能 ...
- 解决新版DBUtils使用连接池from DBUtils.PooledDB import PooledDB报错
解决方法 将下面的代码: from DBUtils.PooledDB import PooledDB import pymysqlpool = PooledDB(pymysql, 5, **{&quo ...
- Cannot create PoolableConnectionFactory。创建连接池异常
错误信息:Cannot create PoolableConnectionFactory (Io 异常: The Network Adapter could not establish the con ...
- python mysql dbutil_python环境测试MySQLdb、DBUtil、sqlobject性能
首先介绍下MySQLdb.DBUtil.sqlobject: (1)MySQLdb 是用于Python连接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQ ...
最新文章
- Java中的等待/通知机制(wait/notify)
- redis和memecache有什么区别?
- 你们需要客户端吗?大话软件企业的营销(上)
- Jenkins 无法捕获构建脚本错误问题
- 检测到磁盘可能为uefi引导_【可QQ无偿协助】无法安装windows 因为这台电脑的磁盘布局不受UEFI固件支持...
- 通过源码分析MyBatis的缓存
- 1476D. Journey
- 外媒:已有5家芯片厂商获准继续向华为供货
- 吉林大学研究生课程-面向对象方法2020考试复习资料
- 理解JS散度(Jensen–Shannon divergence)
- php7 ob get contents,关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
- java import imageio_是否可以使用Java ImageIO从InputStream读取多个...
- 企业应该怎么运营微信公众号?
- 【51nod】---1278 相离的圆(二分排序)
- Usually, this means that the Expanded widget has the wrong ancestor RenderObjectWidget. Typically, E
- spring源码之Mybatis扫描器
- 小王带你了解如何配置静态ip
- osgEarth编译
- 数据结构与算法之排序(Java版)
- python列表是什么数据结构_Python之数据结构:列表
热门文章
- php手机底部菜单,html5手机web页面底部菜单
- linux解压实例,linux 下面压缩,解压.rar文件以及rar,unrar实例
- intel219网卡的linux驱动,ubuntu16.04安装I219-V网卡驱动问题解决方法(示例代码)
- html 文件上传_某平台存在多处任意文件上传
- linux 添加动态链接库路径
- ajax回调函数ifelse,实现AJAX及用Promise解决回调函数命名问题
- linux没有交换分区会怎样,linux – 服务器拒绝使用交换分区
- ajax可以在localhost上用吗_你还不知道跨域问题是怎样造成的吗?
- mybatis sql标签_这谁顶得住?Mybatis 十八连环问
- linux 天堂测试软件,[Ubuntu] HTTP Live Streaming 安装测试