Параллельное выполнение запросов в Python - PullRequest
1 голос
/ 10 апреля 2019

Я новичок в программировании на 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()

Этот запуск выполняется только в первый раз, после чего он переходит в бесконечный цикл и имеет различные ошибки атрибутов.

...