es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo eliminar SQLAlchemy de la memoria RAM después de salir de la función?

Hola, quiero utilizar sqlalchemy para conectarme a mi tabla, obtener algunas columnas, hacer cosas con ellas y luego seguir adelante. El problema es que cuando salgo de la función, mi espacio de memoria RAM no se libera. Aquí tienes un ejemplo ficticio.

from sqlalchemy import create_engine
import gc
mem = !free
dic = {}
dic_conn = {}
print(mem[1])
engine_ = create_engine(psql_string)
for tb in ['tb_1', 'tb_2', 'tb_3', 'tb_4']:
    conn = engine_.connect()
    dic[tb] = conn.execute("select * from {}".format(tb))
    dic_conn[tb] = conn
for k in dic_conn.keys():
    dic_conn[k].close()
    dic_conn[k] = None
for k in dic.keys():
    dic[k].close()
    dic[k] = None
engine_.dispose()
del dic_conn
del dic
del engine_
gc.collect()
mem = !free
print(mem[1])

He intentado todo lo que se me ocurrió, déjame saber cómo puedo liberar esa memoria.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para liberar la memoria después de usar sqlalchemy, puedes seguir estos pasos:

    1. Cierra todas las conexiones de la base de datos utilizando el método close().
    2. Establece todas las variables a None utilizando la instrucción del.
    3. Llama al método gc.collect() para forzar la recolección de basura.

    Puedes implementar estos pasos en tu código de la siguiente manera:

    from sqlalchemy import create_engine
    import gc
    
    # crear el motor
    engine_ = create_engine(psql_string)
    
    # ejecutar las consultas y almacenar los resultados en un diccionario
    dic = {}
    for tb in ['tb_1', 'tb_2', 'tb_3', 'tb_4']:
        conn = engine_.connect()
        dic[tb] = conn.execute('select * from tb')
        conn.close()
    
    # liberar el motor
    engine_.dispose()
    
    # eliminar las variables y llamar a la recolección de basura
    del dic
    del engine_
    gc.collect()
    

    Este código crea el motor, ejecuta las consultas, cierra las conexiones y libera el motor. Luego, elimina las variables y llama a la recolección de basura para liberar la memoria. Al cerrar las conexiones y liberar el motor, sqlalchemy debería liberar los recursos asignados en memoria. Finalmente, llamar a gc.collect() debería forzar al recolector de basura a reclamar los objetos inaccesibles, liberando la memoria.

Comments are closed.