zoukankan      html  css  js  c++  java
  • mysql数据池设置

    参考链接https://www.cnblogs.com/KKSoft/p/8040374.html

    python的数据库连接池包:DBUtils

    DBUtils提供两种外部接口:

    • PersistentDB:提供线程专用的数据库连接,并自动管理连接。
    • PooledDB:提供线程间可共享的数据库连接,并自动管理连接。 

    DBUtils包安装: pip3 install DBUtils

    PooledDB参数解释:

    1. mincached,最少的空闲连接数,如果空闲连接数小于这个数,pool会创建一个新的连接。
    2. maxcached,最大的空闲连接数,如果空闲连接数大于这个数,pool会关闭空闲连接。
    3. maxconnections,最大的连接数,进程中最大可创建的线程数。
    4. blocking, 当连接数达到最大连接数时,再次请求时,如果这个值是True,请求连接的程序会一直等待,直到当前连接数小于最大连接数;如果这个值为False,会报错。
    5. masxshared,当连接数达到这个数时,新请求的连接会分享已经分配出去的连接。

    在uwsgi中,每个http请求都会有一个进程,连接池中配置的连接数都是一个进程为单位的(即上面的最大连接数,都是在一个进程中创建的线程数),如果业务中,一个http请求中需要的sql连接数不是很多的话(其实大多数都只需要创建一个连接),配置的连接数配置都不需要太大。

    连接池对性能的提升:

    • 在程序创建连接的时候,可以从一个空闲的连接中获取,不需要重新初始化连接,提升获取连接的速度。
    • 关闭连接的时候,把连接放回连接池,而不是真正的关闭,所以可以减少频繁的打开和关闭连接。
    #encoding: utf8
    
    import pymysql
    import  MySQLdb
    from MySQLdb.cursors import DictCursor
    from DBUtils.PooledDB import PooledDB
    
    mysqlinfo={
        'host':'',
        'port':,
        'user':,
        'password':,
        'db':',
        'charset':
    }
    
    
    
    class OPMysql(object):
        __pool=None
    
    
        def __init__(self):
            self.conn=OPMysql.getmysqlconn()
            self.cur=self.conn.cursor(cursor=pymysql.cursors.DictCursor)
    
        @staticmethod
        def getmysqlconn():
            if OPMysql.__pool is None:
                __pool = PooledDB(creator=pymysql,mincached=1,maxshared=20,host=mysqlinfo.get('host'),
                                  user=mysqlinfo.get('user'),password=mysqlinfo.get('password'),port=mysqlinfo.get('port'),
                                  charset=mysqlinfo.get('charset'),db=mysqlinfo.get('db'))
                print(__pool)
    
            return __pool.connection()
    
    
        def insert(self,sql):
            print(sql)
            insert_num=self.cur.execute(sql)
            self.conn.commit()
            return insert_num
    
        def select(self,sql):
            print(sql)
            self.cur.execute(sql)
            select_num =self.cur.fetchone()
            print(select_num)
            self.conn.commit()
            return select_num
    
        def dispose(self):
            self.conn.close()
            self.conn.close()
    if __name__ == '__main__':
        mysql=OPMysql()
        mysql.select('select * from air_stations')
        mysql.dispose()
  • 相关阅读:
    剑指offer-面试题59_2-队列的最大值-队列
    剑指offer-面试题59_1-滑动窗口的最大值-数组
    剑指offer-面试题64-求1+2+...+n-发散思维
    客车网上售票系统之前台订票、退票、改签管理和前台留言管理
    客车网上售票系统之票务管理
    客车网上售票系统项目之留言管理和新闻管理
    客车网上售票系统之用户管理
    客车网上销售系统需求分析及项目燃尽图
    MyBatis-plus逻辑删除
    项目启动注释模板
  • 原文地址:https://www.cnblogs.com/1204guo/p/9103773.html
Copyright © 2011-2022 走看看