zoukankan      html  css  js  c++  java
  • 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'
            )
  • 相关阅读:
    广域网详解
    无线AP和无线路由器区别
    TRUNK的作用功能.什么是TRUNK
    name after, name for, name as
    让你的情商爆棚吧!
    综合布线系统之7个子系统构成
    网桥和交换机的工作原理及区别
    边界网关协议BGP
    OSPF协议详解
    路由信息协议(RIP)的防环机制
  • 原文地址:https://www.cnblogs.com/feiyun126/p/8277091.html
Copyright © 2011-2022 走看看