Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Panic0 en 20 Junio 2021, 06:05 am



Título: Ayuda objetos Python
Publicado por: Panic0 en 20 Junio 2021, 06:05 am
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 :·)


Título: Re: Ayuda objetos Python
Publicado por: WHK en 20 Junio 2021, 06:17 am
Hola, para eso existe "del":

Código
  1. a = 'Demo'
  2. del a
  3.  

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.


Título: Re: Ayuda objetos Python
Publicado por: Panic0 en 20 Junio 2021, 06:20 am
Hola, para eso existe "del":

Código
  1. a = 'Demo'
  2. del a
  3.  

Saludos.


Seguro que elimina el objeto de memoria?


Título: Re: Ayuda objetos Python
Publicado por: 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.


Título: Re: Ayuda objetos Python
Publicado por: Panic0 en 20 Junio 2021, 06:28 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!