利用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 里的数据.关系型数据库中的数据.数据表等. 二.说说 ...
随机推荐
- 关于创建String对象过程的内存分配
String是引用数据类型 但是String实际上java给我们提供的是一个类 注意:String 全类被fianl所修饰 所以 String 又叫 字符串常量 String 的值 一旦定义 不可以改 ...
- 利用linux curl爬取网站数据
看到一个看球网站的以下截图红色框数据,想爬取下来,通常爬取网站数据一般都会从java或者python爬取,但本人这两个都不会,只会shell脚本,于是硬着头皮试一下用shell爬取,方法很笨重,但旨在 ...
- HDFS中将普通用户增加到超级用户组supergroup
- ES6学习笔记(字符串和数值)
(一)字符串的扩展 1.字符串的遍历 for (let codePoint of 'foo') { console.log(codePoint) } // "f" // " ...
- poj_3045 贪心
Farmer John's N (1 <= N <= 50,000) cows (numbered 1..N) are planning to run away and join the ...
- curl get方式
提交数据到https时,需要pem证书来加密.我们使用浏览器访问https的时候,浏览器会自动加载网站的安全证书进行加密.但是你用curl请求https时,没有通过浏览器,就只有自己手动增加一个安全证 ...
- git pre-push hook
This article introduces git pre-push hook. Problem In Lean project, we use a modified version of Goo ...
- Dockerfile的常见命令
FROM 格式: FROM <image> 或者 FROM <image>:<tag> FROM指令的功能是为后面的指令提供基础镜像,所以该指令一定是Docke ...
- Winform导入文件
winfrom的选中文件的路径放进文本框,我还是一个新手,欢迎大家在评论里面多多指教
- spring boot1.0 集成quartz 动态配置定时任务
转载自 https://www.imooc.com/article/36278 一.Quartz简介了解 Quartz Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应 ...