美文网首页Python
Python实现数据库连接池化

Python实现数据库连接池化

作者: 刘小白DOER | 来源:发表于2021-08-07 23:25 被阅读0次

    本文测试实践数据库连接池化方法。建立数据库连接是个代价高昂的过程,销毁数据库连接的代价也不小。在实际运用中,可以将预先创建的数据库连接保存在内存中,使用数据库池化技术。

    在并发多个sql语句时,要创建多个数据库连接,数据库连接时稀有资源,MySQL的默认max connections是151。数据库池化技术用在避免每执行一个sql语句就创建一个数据库连接,同时限制某个业务的连接数量。  

    需要注意的是MySQL默认配置的wait_timeout属性确是28800s,也就是8小时,该参数的意义是MySQL在没有进行通信的连接上等待的最长时间直到服务器关闭该连接。所以,数据库连接池化是在一段时间内需要并发执行的需求,而不是长时间一直内存保持数据库连接池。

    测试代码托管在:python/mysql_connection_pool.py at main · laufei90/python (github.com)

    ConnectionPool类的方法如下:

1、构造函数__init__。根据size确定连接池大小,创建队列queue.Queue,并调用_create_new_conn方法来生成size大小的连接池。

2、创建连接方法_create_new_conn。调用pymysql.connect方法来完成数据库连接。

3、连接入队列方法_put_conn。使用put函数入队列,定义此方法时为了在使用完连接后再放入队列中。

4、连接出队列方法_get_conn。使用get函数出队列,如果连接不存在或中断,会调用_create_new_conn()方法再次打开一个连接。定义此方法时为了再执行sql语句时调用连接池中的连接。

5、执行sql语句方法exec_sql。cursor()的execute函数执行sql语句了。同时根据pymysql.OperationalError来判断数据库连接中断的问题,会调用_create_new_conn()方法打开一个连接。

6、销毁连接池方法__del__。get_nowait()函数非阻塞的从队列中取出元素然后销毁数据库连接。

    实例化ConnectionPool类,并完成三个查询,等待30秒来方便在phpmyadmin查看确认以及打开了5个连接,最后删除数据库连接池化。

    运行结果如下,查询数据库版本、查询数据库testbt中的表单hosts、查询数据库的PROCESSLIST都成功。PROCESSLIST刨除数据库的5个后台进程外,符合连接池数量size=5的预期。

在phpmyadmin上查看发现有5个连接。

相关文章

  • Python实现Mysql数据库连接池

    Python实现Mysql数据库连接池 python连接Mysql数据库: python编程中可以使用MySQLd...

  • LabVIEW利用数据库连接池来完成DB操作

    昨天测试实践了-Python实现数据库连接池化[https://www.jianshu.com/p/185b0ce...

  • Druid连接池源码解析(9)pool包小结

    1 pool包 pool包是Druid连接池的核心包之一,主要实现了数据库连接池化的功能;连接池的产生的缘由,我自...

  • DBUtils-数据库连接池

    DBUtils是Python的一个用于实现数据库连接池的模块。 此连接池有两种连接模式: 模式一:为每个线程创建一...

  • Python实现数据库连接池化

    本文测试实践数据库连接池化方法。建立数据库连接是个代价高昂的过程,销毁数据库连接的代价也不小。在实际运用中,可...

  • Flink自定义MySQLSource读取MySQL数据

    先查看数据库连接池实现MySQL连接池 MySQL表student的实体采用case class定义 实现Rich...

  • 用枚举强化singleton属性

    使用枚举实现单例的好处 代码简洁易于阅读 能有效防止序列化或者反射攻击 1.创建一个连接池类(例如数据库连接池),...

  • 数据库连接池

    数据库连接池 C3P0:数据库连接技术 Druid:数据库连接池实现技术,由阿里巴巴技术团队提供 Spring JDBC

  • JDBC学习2

    一.数据库连接池 概念数据库连接池,其实就类似一个容器(集合),存放的是数据库连接(类比线程池)当系统初始化好后,...

  • java基础-day36-数据库连接池和HTML

    数据库连接池和HTML 1. 数据库连接池 1.1 为什么要使用数据库连接池 1.2 数据库连接池考虑的问题 1....

网友评论

    本文标题:Python实现数据库连接池化

    本文链接:https://www.haomeiwen.com/subject/dflnvltx.html