利用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 里的数据.关系型数据库中的数据.数据表等. 二.说说 ...
随机推荐
- fair scheduler配置
<property> <name>yarn.resourcemanager.scheduler.class</name> <value>or ...
- unique_ptr
[unique_ptr] unique_ptr 不共享它的指针.它无法复制到其他 unique_ptr,无法通过值传递到函数,也无法用于需要副本的任何标准模板库 (STL) 算法.只能移动unique ...
- android sdk更新后出现please update ADT to the latest version的解决方法
参考:https://www.cnblogs.com/wicub/p/3613353.html 把 1.修改android-sdk-windows/tools/lib下的plugin.pro文件,用记 ...
- event.keyCode用法及列表
HTML 用户名:<input type="text" id="UserAccount" onKeyPress="JumpByEnter(Use ...
- FPGA_VHDL 学习课堂笔记001
FPGA_VHDL 学习课堂笔记 记录说明:本文档主要记录大学期间,老师FPGA授课课堂笔记. 代码语言:VHDL 编程软件:MAX+plus II FPGA硬件:FLE-843 03月05日 ...
- linux服务开机自动启动
zookeeper设置开机自动启动 第一种:直接修改/etc/rc.d/rc.local文件 在/etc/rc.d/rc.local文件中需要输入两行,其中export JAVA_HOME=/usr/ ...
- 微信小程序日历面板插件
创建日历面板组件,在components目录下创建calendar文件夹 1.calendar.js // components/calendar/calendar.js var util = req ...
- c# 判断当前版本是Debugger或Release
1.第一种 (常用) #if DEBUG //debugger 环境 #else //release 环境 #endif 2. 第二种 private bool IsDebug() { Assembl ...
- GlusterFS
1. GlusterFS概述 GlusterFS是Scale-Out存储解决方案Gluster的核心,它是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处 ...
- 十四、new Comparator<T>实现多重排序结果
1.编写实现类 package com.abcd; public class Person{ private String name; private int age; private int sal ...