Error de falla de segmentación en una aplicación de múltiples subprocesos en python
Tengo una aplicación de múltiples subprocesos en python, en la que creo varios subprocesos de productores y extraen los datos de DB. Los datos se extraen en trozos. Por lo tanto, la parte en la que un hilo crea una instrucción SQL con valores límite se mantiene dentro del bloqueo. Y para que las hebras ejecuten consultas simultáneamente, la función query () se mantiene fuera del bloqueo. Luego, la parte de búsqueda de resultados se mantiene nuevamente bajo la cerradura. A continuación se muestra el fragmento de código:
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()
Pero este código genera un error fatal.segmentation fault (core dumped)
. Porque si pongo todo el código bajo bloqueo, se ejecuta bien. Cierro explícitamente el cursor después de obtener los datos, se vuelve a abrir cuando la función query () se activa de nuevo.
Este código está dentro de una clase llamadaUserAgent
y es un recurso compartido para una clase llamadaProducer
. Por lo tanto, el objeto de base de datos es compartido. Por lo tanto, el área problemática del 99% debe ser que, al compartir el objeto db al golpear simultáneamente la consulta y el cursor de cierre, debe estar desordenado con el conjunto de resultados. Pero entonces, ¿cómo resolver este problema y lograr la ejecución simultánea de la consulta db?