多线程连接数据,提交增改查请求,爆出Packet sequence number wrong - got 7 expected 2(数据包序列号错误)
原因:这是因为多线程共享了同一个数据库连接,但每个execute前没有加上互斥锁
方法一:
每个execute前加上互斥锁
lock.acquire()
cursor.execute(command,data)
lock.release()
方法二:
每个线程拥有自己的数据库连接,即在线程调用函数中加上数据库连接代码
方法三:
所有线程共用一个连接池,需要考虑线程总数和连接池连接数上限的问题
这里我使用的是方法二,因为这样效率最高不用等待其他的线程执行完,实际上只需要把db和cur的全局变量名改为函数内的变量名即可。