高并发下数据库连接使用方案:
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): self.task_num = task_num