2013-01-08 16 views
7

Sto utilizzando pandas.DataFrame in un codice multi-thread (in realtà una sottoclasse personalizzata di DataFrame denominata Sound). Ho notato che ho una perdita di memoria, dal momento che l'utilizzo della memoria del mio programma aumenta gradualmente di oltre 10 minuti, per raggiungere finalmente il 100% della memoria del mio computer e il crash.Perdita di memoria utilizzando pandas dataframe

ho usato objgraph di provare questo tipo di monitoraggio delle perdite, e abbiamo scoperto che il conteggio delle istanze di MyDataFrame è in costante aumento per tutto il tempo mentre non dovrebbe: ogni thread nel suo metodo run crea un'istanza, fa alcuni calcoli, salva il risultato in un file ed esce ... quindi non dovrebbero essere conservati riferimenti.

Utilizzando objgraph ho scoperto che tutti i frame di dati in memoria hanno un simile grafico di riferimento:

enter image description here

Non ho idea se questo è normale o no ... Sembra che questo è ciò che sta mantenendo i miei oggetti in memoria. Qualche idea, consiglio, intuizione?

+0

È possibile includere uno snippet di codice breve per replicare questo? –

+0

Hai provato a eseguire manualmente il garbage collector? Se si dispone di riferimenti circolari, potrebbe essere necessario per rilasciare la memoria. 'importa gc; gc.collect() ' – lgautier

risposta

7

Confermato che c'è un qualche tipo di perdita di memoria nell'infrastruttura di indicizzazione. È non causato dal grafico di riferimento sopra. Passiamo la discussione a GitHub (SO è per Q & A):

https://github.com/pydata/pandas/issues/2659

EDIT: questo sembra in realtà non essere una perdita di memoria a tutti, ma ha a che fare con le questioni di allocazione della memoria del sistema operativo forse. Si prega di dare un'occhiata al problema github per ulteriori informazioni

+0

Ok ... la raccolta manuale con gc sembra davvero fare il trucco. Lo confermerò quando ne sono sicuro. – sebpiq

+0

Ok confermo, questo era il problema ... grazie! – sebpiq

+0

c'è un motivo per cui gen 2 gc non è stato eseguito automaticamente dal runtime Python? – Fil