2013-01-08 15 views
7

Używam pandas.DataFrame w kodzie wielowątkowym (w rzeczywistości niestandardowej podklasy DataFrame o nazwie Sound). Zauważyłem, że mam wyciek pamięci, ponieważ wykorzystanie pamięci mojego programu zwiększa się stopniowo o ponad 10 milionów, aby w końcu osiągnąć ~ 100% pamięci komputera i awarię.Przeciek pamięci przy użyciu pandy danych

użyłem objgraph spróbować śledzenia ten przeciek, i okazało się, że liczba przypadków MyDataFrame dzieje się cały czas, gdy nie powinno: każdy wątek w swojej metodzie run tworzy instancję, sprawia, że ​​kilka obliczeń, oszczędza wynik w pliku i kończy działanie ... więc nie należy przechowywać żadnych odniesień.

Korzystanie objgraph Okazało się, że wszystkie ramki danych w pamięci mają podobny wykres odniesienia:

enter image description here

nie mam pojęcia, czy to normalne czy nie ... Wygląda na to, co jest utrzymanie moje obiekty w pamięci. Każdy pomysł, porady, wgląd?

+0

Czy jest możliwe dołączenie krótkiego fragmentu kodu do replikacji? –

+0

Czy próbowałeś ręcznie uruchomić śmieciarz? Jeśli masz odwołania kołowe, może być wymagane zwolnienie pamięci. 'import gc; gc.collect() ' – lgautier

Odpowiedz

7

Potwierdzono, że wystąpił jakiś wyciek pamięci w infrastrukturze indeksującej. To jest nie spowodowane przez powyższy wykres odniesienia. Przejdźmy do dyskusji na GitHub (SO jest dla Q & A):

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

EDIT: to rzeczywiście wydaje się nie być przeciek pamięci w ogóle, ale ma do czynienia z zagadnieniami alokacji pamięci OS może. Proszę spojrzeć na problem github, aby uzyskać więcej informacji.

+0

Ok ... Gromadzenie ręczne za pomocą gc zdaje się faktycznie działać. Potwierdzę, kiedy jestem tego pewien. – sebpiq

+0

OK Potwierdzam, to był problem ... dziękuję! – sebpiq

+0

czy istnieje powód, dla którego gen 2 gc nie był uruchamiany automatycznie przez środowisko wykonawcze Python? – Fil

Powiązane problemy