作者:紫青郝_385 | 来源:互联网 | 2023-10-09 20:44
我们先来了解一下什么是连接池,池的概念
一、连接池
其实池的概念很好理解,顾名思义,池就是一个池塘,里面放了很多条已经创建好了的连接,这几条连接是有寿命的,在这几条连接池存活的时候,你可以随意使用其中的任意一条,在使用完之后,也不会关闭这条连接,而是会继续放到池中,供下一次调用使用。
池里面的连接数在创建池的时候已经定义好了的,假设为N个连接数。所以如果一旦有多于这个连接数的调用,则第N+1 开始会等待前面的调用完释放连接到连接池才会继续调用。
注意,这里的池是放在内存里的,所以也不是连接数越多越好,白白浪费了资源。太小则起不到池的概念。
有的同学会问,那我想用的时候再创建一条不可以吗,用完就直接回收掉。这样不是更加方便吗?
好问题,所以连接池的有啥好的?
1、数据库 本身有压力,并不能创建太多的并发数访问数据库,如果是大表那更加会有压力,因此限制一定的连接是更加科学的方法。
2、创建和释放数据库连接是一个很耗时的操作,频繁地进行这样的操作将占用大量的性能开销,进而响应速度下降,严重的时候可能导致服务器崩溃,数据库连接池可以节省系统许多开销。
综上所述,可以使用连接池当然最好是使用连接池了。
下面看看怎么实际使用连接池。
二、PooledDB 简单使用
import MySQLdb
from DBUtils.PooledDB import PooledDB
# 实例化
center_pool = PooledDB(creator=MySQLdb, maxcached=10, host=your_host, port=your_port, user=your_user, passwd=your_pass, db=your_db, use_unicode=False, charset='utf8')
cOnnection= center_pool.connection()
creator 表示使用的数据库是什么类型的数据库,这里我使用的是MySQL
mincached,最少的空闲连接数,如果空闲连接数小于这个数,pool会创建一个新的连接
maxcached,最大的空闲连接数,如果空闲连接数大于这个数,pool会关闭空闲连接
maxconnections,最大的连接数,
blocking,当连接数达到最大的连接数时,在请求连接的时候,如果这个值是True,请求连接的程序会一直等待,直到当前连接数小于最大连接数,如果这个值是False,会报错,
maxshared 当连接数达到这个数,新请求的连接会分享已经分配出去的连接
use_unicode 这个参数在python2,python3可能设置的不大一样,可以去尝试尝试。这里使用的环境是python2。
center_pool 实例成功后属性如下
看看对应的connection
可以看到实例化连接后有两个属性,一个是连接的_con 一个是这个连接所属的连接池 _pool 属性。
可以看到是跟上面center_pool是一样的。也就是这个连接是属于连接池中的某一条连接。
如果设置了最大连接数,一旦超过最大连接数时就会报错
这是因为设置了blocking = False,如果设置为True就会一直等待有连接释放后获得。
以上就是蚂蚁今天跟大家分享我遇到的问题,以及解决的方法。
我是一只前进的蚂蚁,希望能一起前行。
如果对您有一点帮助,一个赞就够了,感谢!
注:如果本篇博客有任何错误和建议,欢迎各位指出,不胜感激!!!