Python下Mysql数据连接池——单例

# coding:utf-8
import threading

import pymysql
from DBUtils.PooledDB import PooledDB

from app.common.file_config import get_config

class DbPool(object):
    _instance_lock = threading.Lock()

    def __init__(self):
        if not hasattr(DbPool, "pool"):
            DbPool.mysql_pool()
        else:
            pass

    def __new__(cls, *args, **kwargs):
        if not hasattr(DbPool, "_instance"):
            with DbPool._instance_lock:
                if not hasattr(DbPool, "_instance"):
                    DbPool._instance = object.__new__(cls, *args, **kwargs)
        return DbPool._instance

    @staticmethod
    def mysql_pool():
        host = get_config(‘database‘, ‘MYSQL_HOST‘)
        port = int(get_config(‘database‘, ‘MYSQL_PORT‘))
        user = get_config(‘database‘, ‘MYSQL_USERNAME‘)
        passwd = get_config(‘database‘, ‘MYSQL_PASSWORD‘)
        db = get_config(‘database‘, ‘MYSQL_DB‘)
        DbPool.pool = PooledDB(
            creator=pymysql,  # 使用链接数据库的模块
            mincached=2,  # 初始化时,链接池中至少创建的空闲的链接,0表示不创建
            maxcached=6,  # 链接池中最多闲置的链接,0和None不限制
            maxshared=3,
            # 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,因为pymysql和MySQLdb等模块的 threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。
            maxconnections=8,  # 连接池允许的最大连接数,0和None表示不限制连接数
            blocking=True,  # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
            maxusage=None,  # 一个链接最多被重复使用的次数,None表示无限制
            setsession=None,  # 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."]
            # 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=host,
            port=port,
            user=user,
            passwd=passwd,
            db=db,
            use_unicode=False,
            charset=‘utf8‘
        )

原文地址:https://www.cnblogs.com/feiyun126/p/8277091.html

时间: 2024-09-30 07:00:49

Python下Mysql数据连接池——单例的相关文章

Tomcat 下 mysql的连接池配置和使用

最近维护的一个项目出了问题,最后分析是卡在数据库连接池上,然后就做了些学习. 先把我自己的方法写出来,再说下网上其他的没有成功的方法. 1.首先当然是先把mysql的jar包放在lib目录下,toncat的或者自己项目的lib下都可以. 2.在tomcat的conf目录下的server.xml里添加如下内容,要添加在 <Host></Host>之间 <Context path="/myexample" docBase="myexample&quo

SpringBoot整合Druid数据连接池

SpringBoot整合Druid数据连接池 Druid是什么? Druid是Alibaba开源的的数据库连接池.Druid能够提供强大的监控和扩展功能. 在哪里下载druid maven中央仓库: http://central.maven.org/maven2/com/alibaba/druid/ 怎么获取Druid的源码 Druid是一个开源项目,源码托管在github上,源代码仓库地址是 https://github.com/alibaba/druid.同时每次Druid发布正式版本和快照

数据持久化、单例、重载【添加对不可访问的成员的操作】、魔术方法、类常量、static关键字对self的补充【静态延迟绑定实现$this的效果】、参数类型约束【参数前加类名】、遍历【iterator接口】、快速排序

1.数据持久化过程[传输(例如表单提交或php交互mysql)和保存过程] 使用的是字符串形式的流数据. 数据流就是为了传输[按照序列的形式进行传输] [http://baike.baidu.com/link?url=0MtUQMhFzc_EwJc09rXZV8KlfOL4jis6XNbRfmGA3rQhDcGwOp8togLVQjXBV34M] 所以将其他类型数据转化为字符串的过程也是序列化的过程 [这个概念和图片.视频的流媒体的区别?] [注意点] 另外mysql中sql语句中的某些关键词为

Node.js如何使用MySQL的连接池实例

http://www.111cn.net/database/mysql/90774.htm Nodejs如何使用MySQL Nodejs要连接MySQL,可以使用Nodejs的MysQL驱动来实现.比如,我们这里使用"node-mysql"连接数据库.我们使用下面的方式来连接数据库: 首先,我们需要使用nodejs的包管理工具(npm)安装mysql的驱动.命令行如下: npm install musql 现在,要在js文件中使用mysql,添加下面的代码到你的文件中: var mys

记录一个简单的dbcp数据连接池

这个示例用到了ThreadLocal与dbcp,我觉得有点意思,就整理了下.使用dbcp,肯定要导入commons-dbcp.jar包.下面直接贴DBUtil代码: public class DBUtil { private static DataSource ds; //定义一个数据连接池 //threadLocal是线程的局部变量,它的实例通常是类中的 private static 字段 private static ThreadLocal<Connection> connLocal=ne

python下用mysqldb连接使用数据库

第一步:连接 import MySQLdb #首先需要引入mysqldb即Python 连接 MySQL 的模块. conn=MySQLdb.connect(host="localhost",user="root",passwd="")#此处等价于缺省值时即conn=MySQLdb.connect() cur = conn.cursor() #创建游标,用于发送sql指令 这样就可以用游标cur发送sql指令给mysql了. 第二步:操作 1.创

数据连接池的使用

相比传统的数据连接而言,每次使用Connection 连接数据库时(增删查改)每次都会调用new一个连接对象,去访问数据库,而Connection对象的每次使用,在调用close()方法时,这时候的connection 它只是处于一种关闭的状态,实际而言,他还是存在与内存当中的,这样当我们的业务需求量大大增加时,这样会很耗费我们客户端的内存资源. 而数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数制约.无论这些数据库连接是否被使用,连接池都将

Node.js使用MySQL的连接池

使用Nodejs+MySQL肯定比PHP和MySQL的组合更适合做服务器端的开发. 使用Nodejs你会从他的异步行为中获益良多.比如,提升性能,你无须在从已有的MySQL数据库迁移到其他的NoSQL数据库获得性能的提升.   Nodejs如何使用MySQL Nodejs要连接MySQL,可以使用Nodejs的MysQL驱动来实现.比如,我们这里使用“node-mysql”连接数据库.我们使用下面的方式来连接数据库: 首先,我们需要使用nodejs的包管理工具(npm)安装mysql的驱动.命令

Netbeans 中创建数据连接池和数据源步骤

1.启动glassfish服务器, 在浏览器的地址栏中输入 http://localhost:4848 2.首先建立JDBC Connection Pools: 3.new 一个Connectio Pools 4.对General Settings属性填写: 5.填写Datasource Classname:com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource Ping属性选中,可以用来检验数据连接池是否创建成功! . 6.对Ad