Я создаю многопоточный класс для выполнения запросов MySQL с использованием Python и MySQLdb. Я не Я понимаю, почему выполнение этих запросов с потоками медленнее, чем их выполнение без потоков. Вот мой код, чтобы показать, что я делаю.
Во-первых, вот непоточная функция.
def testQueryDo(query_list):
db = MySQLdb.connect('localhost', 'user', 'pass', 'db_name')
cursor = db.cursor()
q_list = query_list
for each in q_list:
cursor.execute(each)
results = cursor.fetchall()
db.close()
Вот мой многопоточный класс:
class queryThread(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue = queue
self.db = MySQLdb.connect('localhost', 'user', 'pass', 'db_name')
self.cursor = self.db.cursor()
def run(self):
cur_query = self.queue.get()
self.cursor.execute(cur_query)
results = self.cursor.fetchall()
self.db.close()
self.queue.task_done()
А вот обработчик:
def queryHandler(query_list):
queue = Queue.Queue()
for query in query_list:
queue.put(query)
total_queries = len(query_list)
for query in range(total_queries):
t = queryThread(queue)
t.setDaemon(True)
t.start()
queue.join()
Я не уверен, почему этот многопоточный код работает медленнее. Интересно то, что если я использую тот же код, только делаю что-то простое, например сложение чисел, многопоточный код становится значительно быстрее.
Я понимаю, что мне не хватает чего-то совершенно очевидного, однако любая поддержка был бы очень признателен!