Django mysql 多线程_如何合理限制django 的数据库连接数?

本文探讨了Django在连接MySQL时如何合理限制数据库连接数,包括通过设置CONN_MAX_AGE、限制线程数、使用第三方连接引擎以及权限限制这四种方法,并分析了各自的优缺点。最后提出了通过线程安全队列限制执行权限来控制并发连接数的方案。
摘要由CSDN通过智能技术生成

后文以django 连接mysql 为例,进行说明。

背景

django 的默认机制中,在查询时,会建立数据库连接,查询结束后,会断开数据库连接 —— 没有连接池的概念。

官方文档中描述,可以通过设置 CONN_MAX_AGE 让执行数据库查询后,不立即断开连接 —— 一定时间内保持连接,当新的查询任务在连接未断开时,可以复用此连接。这样的好处有:

避免频繁的建立连接,断开连接,消耗数据库的资源

避免大并发时,数据库连接数过多

目标:限制连接数

连接池的引入,可以在并发数高时,限制程序和数据库的连接数,避免数据库连接数太大的错误。

当django 面临高并发时,就会引发连接数过多的错误,此时我们可能会希望使用连接池(允许单个接口增加等待资源,以执行查询的时间)。

比如(特定场景):甲方给乙方提供了user_test 的账号,用于查询db_test数据库,但是限制了user_test 在 db_test 上的连接数。

此时,django 没有连接池的概念就对不上了:因为就算设置 CONN_MAX_AGE,也无法有效限制数据库连接数。

解决方案

限制线程数

方法

在通过uwsgi 部署时,可以限制单个进程中线程数,通过限制整个应用的并发量来限制对于数据库的连接。

优点

操作简单,实现方便

缺点

并发能力大大降低。因为部分请求是不会实际发生数据库操作的,对于连接数的控制不够

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值