sqlalchemy create_engine关于连接池的几个参数

pool_size

设置连接池中,保持的连接数。初始化时,并不产生连接。只有慢慢需要连接时,才会产生连接。例如我们的连接数设置成pool_size=10。如果我们的并发量一直最高是5。那么我们的连接池里的连接数也就是5。当我们有一次并发量达到了10。以后并发量虽然下去了,连接池中也会保持10个连接。

max_overflow

当连接池里的连接数已达到,pool_size时,且都被使用时。又要求从连接池里获取连接时,max_overflow就是允许再新建的连接数。
例如pool_size=10,max_overlfow=5。当我们的并发量达到12时,当第11个并发到来后,就会去再建一个连接,第12个同样。当第11个连接处理完回收后,若没有在等待进程获取连接,这个连接将会被立即释放。

pool_timeout

从连接池里获取连接,如果此时无空闲的连接。且连接数已经到达了pool_size+max_overflow。此时获取连接的进程会等待pool_timeout秒。如果超过这个时间,还没有获得将会抛出异常。
sqlalchemy默认30秒

pool_recycle

这个指,一个数据库连接的生存时间。例如pool_recycle=3600。也就是当这个连接产生1小时后,再获得这个连接时,会丢弃这个连接,重新创建一个新的连接。
当pool_recycle设置为-1时,也就是连接池不会主动丢弃这个连接。永久可用。但是有可能数据库server设置了连接超时时间。例如mysql,设置的有wait_timeout默认为28800,8小时。当连接空闲8小时时会自动断开。8小时后再用这个连接也会被重置。

场景举例

pool_size = 10
max_overflow = 5
pool_timeout = 10
pool_recycle = 3600

0、起始,连接池中0个连接数
1、并发3个处理。此时连接池3个连接
2、并发5个处理。此时连接池5个连接
3、并发3个处理。此时连接池5个连接
4、并发10个处理。此时连接池10个连接
5、并发13个处理。此时连接池13个连接
6、并发10个处理。此时连接池10个连接
7、并发5个处理。此时连接池10个连接
8、并发15个处理。此时连接池15个连接
9、并发18个处理。此时连接池15个连接,15个并发在处理。3个并发在等待连接。如果10秒内,那15个并发仍未释放连接,3个并发处理错误,抛出异常。
10、并发15个处理。此时连接池15个连接
11、并发8个处理。此时连接池10个连接
12、等待一小时
13、并发3个处理。丢弃掉3个旧的连接,重新创建3个连接,此时连接池10个连接。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值