Segmentierungsfehler Fehler in einer Multithread-App in Python

Ich habe eine Multithread-App in Python, in der ich mehrere Producer-Threads erstelle und sie die Daten aus der Datenbank extrahieren. Daten werden in Blöcken extrahiert. Der Teil, in dem ein Thread eine SQL-Anweisung mit Grenzwerten erstellt, bleibt also innerhalb der Sperre. Damit Threads gleichzeitig Abfragen ausführen können, bleibt die Funktion query () außerhalb der Sperre. Dann wird der Ergebnisabrufteil wieder unter der Sperre gehalten. Unten ist das Code-Snippet:

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()

Dieser Code erzeugt jedoch einen schwerwiegenden Fehlersegmentation fault (core dumped). Denn wenn ich den gesamten Code verriegelt habe, funktioniert er einwandfrei. Wenn ich den Cursor nach dem Abrufen der Daten explizit schließe, wird er wieder geöffnet, wenn die Funktion query () erneut ausgelöst wird.

Dieser Code befindet sich in einer Klasse mit dem NamenUserAgent und es ist eine gemeinsam genutzte Ressource für eine Klasse namensProducer. Somit wird das Datenbankobjekt gemeinsam genutzt. Der Problembereich 99% muss also sein, dass, wenn das DB-Objekt gemeinsam auf die Abfrage zugreift und der schließende Cursor die Ergebnismenge durcheinanderbringt. Aber wie kann man dieses Problem lösen und gleichzeitig eine Datenbankabfrage ausführen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage