Я новичок в программировании на Python.Я хочу выполнять мои запросы к базе данных параллельно.Предполагая два отдельных запроса, как выполнить их параллельно для запроса к одной и той же базе данных, а также дождаться возврата обоих результатов, прежде чем продолжить выполнение остальной части кода?
from threading import Thread, Lock
class DatabaseWorker(Thread):
def __init__(self, connection, query, paramDictFilter, key, query_mode, lstResultData):
Thread.__init__(self)
self.connection = connection
self.query = query
self.paramDictFilter = paramDictFilter
self.key = key
self.query_mode = query_mode
self.lstResultData = lstResultData
self.lock = Lock()
def run(self):
resultData = dict()
try:
with self.lock:
with self.connection.cursor('dict') as cur:
cur.execute(self.query, self.paramDictFilter)
if self.query_mode == 0:
resultData[self.key] = cur.fetchone()
else:
resultData[self.key] = cur.fetchall()
cur.close()
except Exception as e:
print(e)
self.lstResultData.append(resultData)
Внешний класс:
connV = Database.connect_vertica_dbs()
qryDefaultSection = """ """
qryBusinessAddress = """ """
workerBusinessAddress = DatabaseWorker(connV, qryBusinessAddress, paramDictFilter, "businessAddr", 1, lstResultData)
workerDefaultSection = DatabaseWorker(connV, qryDefaultSection, paramDictFilter, "defaultHistory", 1, lstResultData)
workerBusinessAddress.start()
workerDefaultSection.start()
delay = 1
while len(lstResultData) < 2:
time.sleep(delay)
workerBusinessAddress.join()
workerDefaultSection.join()
connV.close()
Этот запуск выполняется только в первый раз, после чего он переходит в бесконечный цикл и имеет различные ошибки атрибутов.