Ошибка ошибки сегментации в многопоточном приложении в Python

У меня есть многопоточное приложение на Python, в котором я создаю несколько потоков производителей, и они извлекают данные из БД. Данные извлекаются кусками. Таким образом, часть, в которой поток создает SQL-оператор с предельными значениями, находится в пределах блокировки. И чтобы потоки могли выполнять запросы одновременно, функция query () находится вне блокировки. Затем часть выборки снова остается под замком. Ниже приведен фрагмент кода:

with UserAgent.lock:
    sqlGeoTarget = "call sp_ax_ari_select_user_agent_list('0'," + str(self.chunkStart) + "," + str(self.chunkSize) + ",1);"
    self.chunkStart += self.chunkSize

self.dbObj.query(sqlGeoTarget)
print "query executed. Processing data now..."+sqlGeoTarget

with UserAgent.lock:
    result = self.dbObj.fetchAll()
    self.dbObj.dbCursor.close()

Но этот код генерирует фатальную ошибкуsegmentation fault (core dumped), Потому что, если я поставлю весь код под блокировку, он будет работать нормально. Я явно закрываю курсор после извлечения данных, он снова открывается при повторном запуске функции query ().

Этот код находится внутри класса с именемUserAgent и это'общий ресурс для класса с именемProducer, Таким образом, объект базы данных является общим. Таким образом, проблемная область 99% должна состоять в том, что, поскольку объект db совместно используется, одновременно выполняется запрос запроса и закрывающий курсор должен портить набор результатов. Но тогда как решить эту проблему и добиться одновременного выполнения запроса к БД?

Ответы на вопрос(1)

Ваш ответ на вопрос