利用python list 完成最简单的DB连接池
先来看查看效果:

在代码连接数据库后,并且执行三条sql后,将mysql直接重启掉,故我们的连接池连接均是不ok的,所以,它会全部删除再抓新的连接下来,重启mysql命令:

关于python代码:
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import pymysql
import random
import time
# 初始化mysql 连接池
def MySQLInit(mysql_host,mysql_port,mysql_user,mysql_password,mysql_charset,mysql_dbname,mysql_maxconnect):
# 定义返回mysql连接池的类型,这里定义为 list
return_db_list = []
for Connect in range(0,mysql_maxconnect):
try:
db = pymysql.connect(
host = mysql_host ,
port = mysql_port ,
user = mysql_user ,
passwd = mysql_password ,
db = mysql_dbname ,
charset = mysql_charset
)
print ("连接MySQL数据库成功,MySQL数据库ID为:%s" %(db))
return_db_list.append(db)
except Exception as e:
print ("连接MySQL数据库出错")
print (e)
# 如果mysql连接池为空,则返回-1
if 0 == len(return_db_list):
print ("错误 , 连接MySQL数据库失败,连接池为0")
return -1
else:
# 返回mysql连接池
return return_db_list
def Pull_DB_Connect(mysql_host,mysql_port,mysql_user,mysql_password,mysql_charset,mysql_dbname , MySQL_Connect_Pool , mysql_maxconnect) :
# 打印补充前的mysql连接数
print ("补充前MySQL连接数为:",len(MySQL_Connect_Pool))
# 循环相差的连接数
for Connect in range((len(MySQL_Connect_Pool)) , mysql_maxconnect):
try:
db = pymysql.connect(
host = mysql_host ,
port = mysql_port ,
user = mysql_user ,
passwd = mysql_password ,
db = mysql_dbname ,
charset = mysql_charset
)
print ("重新补充,连接MySQL数据库成功,MySQL数据库ID为:%s" %(db))
# 将刚刚连接成功的DB连接追加到MySQL_Connect_Pool中
MySQL_Connect_Pool.append(db)
except Exception as e:
print ("重新补充,连接MySQL数据库出错")
print (e)
if 0 == len(MySQL_Connect_Pool):
print ("错误 , 连接MySQL数据库失败,连接池为0")
return -1
else:
# 打印连接池总数并且返回
print("Mysql 连接池总数为:" , len(MySQL_Connect_Pool))
return MySQL_Connect_Pool
def main() :
# 定义测试mysql信息
mysql_host = "192.168.1.100"
mysql_port = 3306
mysql_user = "liwang"
mysql_password = "liwang"
mysql_charset = "utf8"
mysql_dbname = "itchat"
mysql_maxconnect = 3
# 初始化mysql连接池
MySQL_Connect_Pool = MySQLInit(mysql_host,mysql_port,mysql_user,mysql_password,mysql_charset,mysql_dbname,mysql_maxconnect)
# 定义初始化sql
sql = "show databases;"
while True:
# 随机获连接池的下标
db_link = random.randint(0,len(MySQL_Connect_Pool)-1)
try:
# 执行sql
cursor = MySQL_Connect_Pool[db_link].cursor()
cursor.execute(sql)
print (cursor.fetchall())
except Exception as e:
# 如果执行失败,模拟为DB连接失效,则打印错误信息,删除错误的MySQL_Connect_Pool信息
print (e)
del MySQL_Connect_Pool[db_link]
print ("数据库无法连接,删除Mysql连接池下标:" , db_link)
# 重新补充mysql连接池
Pull_DB_Connect(mysql_host,mysql_port,mysql_user,mysql_password,mysql_charset,mysql_dbname,MySQL_Connect_Pool,mysql_maxconnect)
# 休眠10s
time.sleep(10)
if __name__ == "__main__" :
main()
利用python list 完成最简单的DB连接池的更多相关文章
- 用swoole简单实现MySQL连接池
MySQL连接池 在传统的网站开发中,比如LNMP模式,由Nginx的master进程接收请求然后分给多个worker进程,每个worker进程再链接php-fpm的master进程,php-fpm再 ...
- Go语言之从0到1实现一个简单的Redis连接池
Go语言之从0到1实现一个简单的Redis连接池 前言 最近学习了一些Go语言开发相关内容,但是苦于手头没有可以练手的项目,学的时候理解不清楚,学过容易忘. 结合之前组内分享时学到的Redis相关知识 ...
- 自定义一个简单的JDBC连接池
一.什么是JDBC连接池? 在传统的JDBC连接中,每次获得一个Connection连接都需要加载通过一些繁杂的代码去获取,例如以下代码: public static Connection getCo ...
- 转 Swoole】用swoole简单实现MySQL连接池
MySQL连接池 在传统的网站开发中,比如LNMP模式,由Nginx的master进程接收请求然后分给多个worker进程,每个worker进程再链接php-fpm的master进程,php-fpm再 ...
- Redis 简单使用 and 连接池(python)
Redis 简介 NoSQL(not only sql):非关系型数据库 支持 key-value, list, set, zset, hash 等数据结构的存储:支持主从数据备份,集群:支持 ...
- python 基础 10.0 nosql 简介--redis 连接池及管道
一. NOSQL 数据库简介 NoSQL 泛指非关系型的数据库.非关系型数据库与关系型数据库的差别 非关系型数据库的优势: 1.性能NOSQL 是基于键值对的,可以想象成表中的主键和值的对应关系,而且 ...
- 自定义DB连接池实现
实现一个简单的数据库连接池 1,连接池接口 package dbsource; import java.sql.Connection; import java.sql.SQLException; /* ...
- Redisclient连接方式Hiredis简单封装使用,连接池、屏蔽连接细节
工作须要对Hiredis进行了简单封装,实现功能: 1.API进行统一,对外仅仅提供一个接口. 2.屏蔽上层应用对连接的细节处理: 3.底层採用队列的方式保持连接池,保存连接会话. 4.重连时採用时间 ...
- 利用Python进行数据分析(1) 简单介绍
一.处理数据的基本内容 数据分析 是指对数据进行控制.处理.整理.分析的过程. 在这里,“数据”是指结构化的数据,例如:记录.多维数组.Excel 里的数据.关系型数据库中的数据.数据表等. 二.说说 ...
随机推荐
- jmeter学习笔记--线程组
jmeter组件:线程组 是什么? 进程:一个正在执行的程序对应一个进程 线程:进程中的执行线索(一个进程中有多个执行线索) 线程组:按照线程性质对线程进行分组 并发执行:多个线程同时进行 特点 ...
- Presto集群部署和配置
参考文档:1.https://blog.csdn.net/zzq900503/article/details/79403949 prosto部署与连接hive使用 2. ...
- 【iOS】値の判断
NSString str; ){ //nilの判断 //nullの判断 //長さの判断 // ...... }
- 【相关网站 - 02】- Java 好文博客
一.源码分析博客 还有这种操作?浅析为什么要看源码 你觉得什么才是 Java 的基础知识? 1. JDK 2. Mybatis 3. Spring 4. Sring Boot 5. Spring Cl ...
- jq动画设置图片抽奖
(因为自己是前端刚入门的小白所以中间出现很多问题,不过这对于我来说就是一次经验的积累) 预想效果:点击"开始",图片循环旋转,不是同时的效果,而是有一定的时间差.点击"开 ...
- git pre-push hook
This article introduces git pre-push hook. Problem In Lean project, we use a modified version of Goo ...
- java中LIst转换成Json
List转换成json串 public String getNameListByID(Long Id) { List<Name> nameLists= nameService.select ...
- python的re模块详解
一.正则表达式的特殊字符介绍 正则表达式 ^ 匹配行首 $ 匹配行尾 . 任意单个字符 [] 匹配包含在中括号中的任意字符 [^] 匹配包含在中括号中的字符之外的字符 [-] 匹配指定范围的任意单个字 ...
- 解决layui table方法渲染时时间格式问题
在显示时间时没有成功 ,{field:'showTime',title:'要显示的时间'} 崎岖过程就不详述了,直接上干货 @官网相关文档1.@官网相关文档2.@参考文章1.@参考文章2 浏览了很多资 ...
- mysql设置存储中文变成问号或者乱码
技术交流群: 816227112 问题: 解决办法: 修改my.ini 如果是my-default.ini 要重命名成my.ini 要注意顺序,有可能服务启动不起来 [mysqld] charact ...