案例+源码:MySQL数据库连接池详解

本文介绍了在高并发环境下,针对MySQL数据库连接的解决方案,包括使用DBUtils库中的SteadyDB、SimplePooledDB、PersistentDB和PooledDB四个模块。SteadyDB提供强硬的数据库连接,PersistentDB实现线程特定的连接重用,SimplePooledDB为简单连接池,而PooledDB则提供了线程安全的连接池,支持连接共享。通过这些连接池策略,可以提高数据库访问性能并保证线程安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高并发下数据库连接使用方案:

  1.使用已有数据库连接池(下文有介绍)

  2.每个执行单元建立一次连接独享;(效率超低,难以维护,不建议使用)

  3.手动维护线程池(本人在MAC测试目前效率最高);

 

实测代码案例:

import timeimport pymysqlfrom dbutils import persistent_db, pooled_db, simple_pooled_db, steady_dbfrom multiprocessing.pool import ThreadPoolfrom abc import abstractmethod,ABCMetafrom queue import Queue# print(help(pooled_db.PooledDB))# pooled_db 线程安全# print(pymysql.threadsafety)db_conf = {"host": "127.0.0.1",           "port": 3306,           "user": "root",           "password": "123456",           "database": "userinfo"           }class TaskConsumer(metaclass=ABCMeta):    @abstractmethod    def _task_worker(self, i):        pass    def consumer(self):        task_pool = ThreadPool(self.task_pool_num)        start_time = time.time()        for i in range(self.task_num):            task_pool.apply_async(func=self._task_worker, args=(i,))        task_pool.close()        task_pool.join()        return time.time() - start_time    def db_read(self, cur, sql, i):        # time.sleep(2)        cur.execute(sql)        print(i, cur.fetchall())class DbPoolTest(TaskConsumer):    def __init__(self, task_num, task_pool_num, max_conn, blocking=True, **db_conf):    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值