Ayuda objetos Python

Iniciado por Panic0, 20 Junio 2021, 06:05 AM

0 Miembros y 1 Visitante están viendo este tema.

Panic0

Hola, hay alguna forma de destruir objetos y liberar memoria? Sin que sea ingeniero profesional, porque la verdad no se como hacer algo asi


Quiero hacer esto porque estoy usando Imágenes muy grandes y de alta resolución y parece que cada vez que abro mi proyecto todo se vuelve mas y mas lento.



Gracias :·)
Los ataques de pánico suelen comenzar de forma súbita, sin advertencia.

WHK

#1
Hola, para eso existe "del":

Código (python) [Seleccionar]

a = 'Demo'
del a


Igual va a depender del contexto de tu proyecto, si es de escritorio o web, normalmente si es web debes obtener los bytes del archivo de a trozos y enviarlos al navegador en ves de cargar todo el binario en una variable y mostrarla, desde una aplicación de escritorio puedes utilizar recursos de tkinter o directamente con canvas y pygame.

Saludos.

Panic0

Cita de: WHK en 20 Junio 2021, 06:17 AM
Hola, para eso existe "del":

Código (python) [Seleccionar]

a = 'Demo'
del a


Saludos.


Seguro que elimina el objeto de memoria?
Los ataques de pánico suelen comenzar de forma súbita, sin advertencia.

WHK

#3
Asi es, mira, dale un vistazo acá: https://www.delftstack.com/howto/python/python-clear-memory/

Una cosa es que se elimine y otra totalmente distinta es la asignación de clonado automático de objetos por referencia, o sea, si pasas un objeto a otra función y luego la eliminas entonces por defecto creará un clon en ves de crear una referencia, esto es dinámico, lo hace python de manera automática, también puedes darle un vistazo al destructor __del__() para eliminar manualmente conectores o threads al momento de destruir el módulo.

Normalmente llevar bytes de una funcion a otra es una mala práctica, normalmente siempre debes hacer viajar el puntero de la apertura del archivo o la ruta y hacer la carga únicamente cuando lo necesites, recuerda que vaciar muchos bytes en memoria toma su tiempo, las memorias ram no son instantáneas, una cosa es que la aplicación se cierre o que la clase la hayas eliminado y otra muy diferente es que ya no exista en la memoria ram, mientras tanto el kernel estará esforzandose por realizar la limpieza que le ordenaste, por eso no es bueno llevarse a la memoria muchos recursos salvo que necesites mucha velocidad y cahce como por ejemplo el precargado del mapa de un juego y sus texturas, en tu caso desconozco de que sea tu aplicación.

Saludos.

Panic0

Cita de: WHK en 20 Junio 2021, 06:21 AM
Asi es, mira, dale un vistazo acá: https://www.delftstack.com/howto/python/python-clear-memory/

Una cosa es que se elimine y otra totalmente distinta es la asignación de clonado automático de objetos por referencia, o sea, si pasas un objeto a otra función y luego la eliminas entonces por defecto creará un clon en ves de crear una referencia, esto es dinámico, lo hace python de manera automática, también puedes darle un vistazo al destructor __del__() para eliminar manualmente conectores o threads al momento de destruir el módulo.

Normalmente llevar bytes de una funcion a otra es una mala práctica, normalmente siempre debes hacer viajar el puntero de la apertura del archivo o la ruta y hacer la carga únicamente cuando lo necesites, recuerda que vaciar muchos bytes en memoria toma su tiempo, las memorias ram no son instantáneas, una cosa es que la aplicación se cierre o que la clase la hayas eliminado y otra muy diferente es que ya no exista en la memoria ram, mientras tanto el kernel estará esforzandose por realizar la limpieza que le ordenaste, por eso no es bueno llevarse a la memoria muchos recursos salvo que necesites mucha velocidad y cahce como por ejemplo el precargado del mapa de un juego y sus texturas, en tu caso desconozco de que sea tu aplicación.

Saludos.

Muchísimas gracias joven!
Los ataques de pánico suelen comenzar de forma súbita, sin advertencia.