Articles of recolección de basura

Uso de memoria en la manipulación / procesamiento de grandes estructuras de datos.

Tengo varios archivos grandes (~ 100 Mb) que estoy procesando regularmente. Mientras trato de eliminar estructuras de datos innecesarias durante el procesamiento, el consumo de memoria es un poco demasiado alto. Me preguntaba si hay una manera de manipular eficientemente datos grandes, por ejemplo: def read(self, filename): fc = read_100_mb_file(filename) self.process(fc) def process(self, content): # […]

Forzar recolección de basura en Python para liberar memoria

Tengo una aplicación Python2.7 que usa muchos objetos dict que en su mayoría contienen cadenas para claves y valores. A veces, esos dados y cadenas ya no son necesarios y me gustaría eliminarlos de la memoria. Probé diferentes cosas, del dict[key] , del dict , etc. Pero la aplicación todavía usa la misma cantidad de […]

¿PyQT4 signal.connect mantiene los objetos en vivo?

Si tengo una señal y registro una función de objetos en la señal, ¿esto mantendrá el objeto vivo y detendrá la recolección de basura de ese objeto? P.ej class Signals(): signal = Qt.pyqtSignal() def __init__(self): QObject.__init__(self) class Test(); def __init__(self, s): s.connect(self.done) def done(self): print(“Done”) s = Signals() t = Test(s.signal) t = None s.signal.emit() […]

¿Cómo se recolecta la basura de la memoria en el motor de la aplicación (python) cuando se itera sobre los resultados de la base de datos?

Tengo un código que itera sobre las entidades de base de datos y se ejecuta en una tarea, vea a continuación. En el motor de la aplicación, memory_usage().current() Error de Exceeded soft private memory limit y, de hecho, al revisar memory_usage().current() confirma el problema. Vea a continuación la salida de la statement de registro. Parece […]

Entendiendo gc.get_referrers

Estoy tratando de rastrear una pérdida de memoria en Python (2.7). He encontrado gc.get_referrers, pero no entiendo la salida. Después de eliminar dying_node (que debería eliminar todas las referencias excepto una lista que he creado como parte de mi búsqueda), tengo en mi código: gc.collect() print “done dying: “, getrefcount(dying_node) #note, includes the reference from […]

Varios objetos de alguna manera interfieren entre sí

Tengo una neural network (NN) que funciona perfectamente cuando se aplica a un único conjunto de datos. Sin embargo, si quiero ejecutar la NN en, por ejemplo, un conjunto de datos y luego crear una nueva instancia de la NN para ejecutar en un conjunto diferente de datos (o incluso el mismo conjunto de nuevo), […]

¿Formas de liberar la memoria de vuelta al sistema operativo desde Python?

Tengo un código que se parece a esto: def memoryIntensiveFunction(x): largeTempVariable = Intermediate(x) processFunction(largeTempVariable,x) El problema es que la variable temp es algo así como 500 mb en un caso de prueba mío, pero ese espacio no se devuelve al sistema operativo cuando finaliza memoryIntensiveFunction . Lo sé porque los perfiles de memoria con la […]

¿Cómo evito la pérdida de memoria cuando cargo archivos de gran tamaño en un bucle for?

Tengo 50 archivos pickle de 0.5 GB cada uno. Cada archivo pickle se compone de una lista de objetos de clase personalizados. No tengo problemas para cargar los archivos individualmente usando la siguiente función: def loadPickle(fp): with open(fp, ‘rb’) as fh: listOfObj = pickle.load(fh) return listOfObj Sin embargo, cuando bash cargar de forma iterativa los […]

¿Una basura de list_iterator recolecta sus valores consumidos?

Supongamos que tengo li = iter([1,2,3,4]) . ¿El recolector de basura caerá las referencias a un elemento inaccesible cuando haga lo next(li) ? ¿Y qué pasa con el deque ¿Los elementos en di = iter(deque([1,2,3,4])) serán coleccionables una vez consumidos? Si no, una estructura de datos nativa en Python implementa tal comportamiento.

Pérdida de memoria en Python Twisted: ¿dónde está?

Tengo un servidor Twisted bajo carga. Cuando el servidor está bajo carga, el uso de la memoria aumenta y nunca se reclama (incluso cuando no hay más clientes). La próxima vez que se cargue, el uso de la memoria aumenta nuevamente. Aquí hay una instantánea de la situación en ese punto: La memoria RSS es […]