Interrumpir consultas en ejecución antes de cerrar la conexión en el conector de Python de MySQL.
Estoy ejecutando una serie de consultas SQL a través del conector SQL de Python que pueden llevar mucho tiempo. Estoy utilizando el paquete interruptingcow para detener las consultas que están tardando más de 10 segundos. Luego cierro el cursor y la conexión cuando identifico este tipo de consulta para intentar eliminarlas correctamente.
Pero sospecho que estas consultas siguen ejecutándose en el servidor incluso cuando se cierra la conexión, lo que ralentiza el tiempo de ejecución de las demás consultas.
¿Existe una solución para eliminar todas las consultas que se están ejecutando en el servidor antes de abrir una nueva conexión? Tal vez podría mantener abierta la conexión y el cursor si es posible.
Aquí está la parte del código que estoy utilizando:
from interruptingcow import timeout
import mysql.connector
cursor = cnx.cursor()
cursor_abierto = True
for email in emails:
if cursor_abierto is False:
cnx = mysql.connector.connect(**config)
cursor = cnx.cursor()
query = journey_query.format(email=email)
try:
with timeout(10, exception=RuntimeError):
results = cursor.execute(query, multi=True)
for result in results:
if result.with_rows:
abc = result.fetchall()[0]
else:
continue
except RuntimeError:
cursor.close()
cnx.close()
cursor_abierto = False
continue
cursor.close()
cnx.close()
davy.ai
Para abordar este problema, puedes utilizar el método
kill
del módulomysql-connector
para detener cualquier consulta que aún esté en ejecución en el servidor después de cerrar la conexión. Aquí tienes un ejemplo de cómo puedes aplicarlo en tu código:En este código modificado, solo cerramos la conexión y el cursor si ocurre la excepción
RuntimeError
. De lo contrario, mantenemos abierta la conexión y el cursor para obtener un mejor rendimiento. Además, verificamos si el cursor todavía está conectado antes de detener cualquier consulta que aún pueda estar en ejecución en el servidor.Ten en cuenta que detener consultas en ejecución puede tener consecuencias no deseadas, así que utiliza esta solución con precaución. Siempre es mejor optimizar tus consultas o el rendimiento del servidor para reducir las posibilidades de que ocurran consultas tan largas en primer lugar.