使用python的多线程库处理数据,发现mysql总是有一定概率报 mysql: Commands out of sync; you can't run this command now,几番查询,有的说是因为存在没有返回mysql结果就开始发起另外一个请求,有的说在sql里面有分号、也有的说是没有释放结果集。有可能的原因都尝试但最后都没有解决。在排查过程中想到是不是因为多线程导致mysql处理连接混乱了,于是就写了一个多线程连接池,果真解决问题。附上部分代码
import threadpool
import threading
db_pool={}
# 多线程初始化
pool = threadpool.ThreadPool(thread_num)
request = threadpool.makeRequests(test,...)
[pool.putRequest(req) for req in request]
pool.wait()
def test():
"""线程调用方法"""
thread_id = threading.currentThread().ident
db_pool[thread_id]= MySQLdb.connect(...).open()
do_some_func()
def do_some_func():
"""执行MYSQL查询"""
thread_id = threading.currentThread().ident
sql="select * from ...."
db_pool[thread_id].execute(sql,[])