我正在学习python和mysql,因此我想使用多线程在mysql数据库中进行编写
当我尝试这样做并尝试创建多个线程时,它显示出类似错误的连接未找到,但如果我尝试使用1个线程,它工作正常,但速度较低,即40行p/s
请帮我做这件事,如果我做错了,请让我知道是否有一个好的方法来做thanx
import mysql.connector
from queue import Queue
from threading import Thread
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="",
database="list"
)
def do_stuff(q):
while True:
mycursor = mydb.cursor()
a= q.get()
sql = "INSERT INTO demo1 (id, name, price, tmp) VALUES (%s, %s, %s, %s)"
val = (a[0], a[1],a[3],a[2])
mycursor.execute(sql, val)
mydb.commit()
q.task_done()
q = Queue(maxsize=0)
num_threads = 1 #if I try more then 1 it throw error "IndexError: bytearray index out of range"
for i in range(num_threads):
worker = Thread(target=do_stuff, args=(q,))
worker.setDaemon(True)
worker.start()
def strt():
mycursor = mydb.cursor()
sql = f"SELECT * FROM demo ORDER BY id"
mycursor.execute(sql)
myresult = mycursor.fetchall()
for x in myresult:
q.put(x)
strt()
Hi为了完成事务,您必须打开与每个线程的连接。这是如何工作的,当你打开一个连接时,这些连接是通过一个池获得的。如果打开一个连接,则该连接始终由一个进程使用,而不让另一个进程连接。
它不会造成任何瓶颈,因为当一个连接空闲时,该连接将从池中选择。
源