Python 连接池 结合 多线程操作 MySQL
代码
import os, threading
from DBUtils.PooledDB import PooledDB
import pymysql, random, time
from queue import Queue
class Test(threading.Thread):
def __init__(self, n):
super(Test, self).__init__()
mysql_conf = {
"host": "127.0.0.1",
"user": "root",
"passwd": "123456",
"charset": "utf8",
"db": "ep_mall",
"cursorclass": pymysql.cursors.DictCursor
}
self.n = n
self.pool = PooledDB(pymysql, maxconnections=25, blocking=True, **mysql_conf)
self.alpha = list("qwertyuiopasdfghjklzxcvbnm")
self.sex = ["m", "s"]
def run(self):
print("%s号线程开始任务" % self.n)
sql = "insert into cc_test values (%s,%s,%s,%s,%s)"
conn = self.pool.connection()
cursor = conn.cursor()
data_set = []
try:
for i in range(100):
name = "".join(random.sample(self.alpha, 5))
sex = random.choice(self.sex)
age = random.randint(10, 60)
classid = random.randint(1000, 9999)
data_set.append((None, name, sex, age, classid))
cursor.executemany(sql, data_set)
conn.commit()
print("%s号线程完成任务" % self.n)
except:
conn.rollback()
print("%s号线程任务失败" % self.n)
finally:
cursor.close()
conn.close()
start_time = time.time()
thread_list = []
for i in range(1000):
thread_list.append(Test(i + 1))
if len(thread_list) >= 10:
print(len(thread_list))
print(i)
for thread in thread_list:
thread.start()
for thread in thread_list:
thread.join()
thread_list = []
print("总共用时:" + str(time.time() - start_time))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 用 .NET NativeAOT 构建完全 distroless 的静态链接应用
· 为什么构造函数需要尽可能的简单
· 探秘 MySQL 索引底层原理,解锁数据库优化的关键密码(下)
· 大模型 Token 究竟是啥:图解大模型Token
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
· 用 .NET NativeAOT 构建完全 distroless 的静态链接应用
· 上周热点回顾(3.31-4.6)
· 爆肝 1 周,为我的白板工具支持了 mermaid 流程图,为 ai 生成流程图铺平道路
· 如何开发 MCP 服务?保姆级教程!