MySQL中的连接池
2024-01-07 22:01:07
数据库的连接池
1 )概述
- 网站连接数据库,为庞大用户的每次请求创建一个连接是不合适的
- 关闭并重新连接的成本是很大的
- 处理方法:设置最大值, 最小值, 设置最多闲置连接,设置等待阻塞
2 )示例演示
import threading
import pymysql
from dbutils.pooled_db import PooledDB
MYSQL_DB_POOL = PooledDB(
creator=pymysql, # 使用连接数据库的模块
maxconnection=5, # 连接池允许的最大连接数,0 和 None 表示不限制连接数
mincached=2, # 初始化时,连接池中至少创建的空闲的连接,0表示不创建
maxcached=3, # 连接池中最多闲置的连接,0 和 None 不限制
blocking=True, # 连接池中如果没有可用连接后,是否阻塞等待。True, 等待: False, 不等待然后报错
setsession=[], # 开始会花钱执行的命令列表,如: ["set datestyle to ...", "set time zone ..."]
ping=0, # 没必要做连接前的检查, 0 = None = never, 1 = default = whenever it is rquested, 2 = when a cursor is created, 4 = when a query is executed, 7 = always
host='127.0.0.1',
port=3306,
user='root',
password='xxxx',
database='userdb'
charset='utf8'
)
def task():
# 去连接池获取一连接, 有则获取,无则阻塞
conn = MYSQL_DB_POOL.connection()
cursor = cursor(pymysql.cursors.DictCursor)
cursor.execute('select sleep(2)')
result = cursor.fetchall()
cursor.close()
conn.close() # 将连接还给连接池
def run():
# 开始并发请求
for i in range(10):
t = threading.Thread(target=task)
t.start()
if __name__ == '__main__':
run()
- 在实际工作中,程序是需要做负载均衡,数据库也是需要搭建集群的
- 并发问题是性能瓶颈的主要问题
文章来源:https://blog.csdn.net/Tyro_java/article/details/135381266
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!