Wielkość pamięci Pythona a wielkość sterty

Mam problemy z pamięcią podczas używania skryptu Pythona do wydawania dużychsolr pytanie. Używamsolrpy biblioteka do współpracy z serwerem solr. Zapytanie zwraca około 80 000 rekordów. Natychmiast po wydaniu zapytania ślad pamięci Pythona w widoku górnych balonów do ~ 190 MB.

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 
8225 root      16   0  193m 189m 3272 S  0.0 11.2   0:11.31 python
...

W tym momencie profil sterty widziany przez heapy wygląda tak:

Partition of a set of 163934 objects. Total size = 14157888 bytes.   
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0  80472  49  7401384  52   7401384  52 unicode
     1  44923  27  3315928  23  10717312  76 str
...

Obiekty unicode reprezentują unikalne identyfikatory rekordów z zapytania. Należy zauważyć, że całkowita wielkość sterty to tylko 14 MB, podczas gdy python zajmuje 190 MB pamięci fizycznej. Gdy zmienna przechowująca wyniki kwerendy wypadnie poza zasięgiem, profil sterty poprawnie odzwierciedla zbieranie śmieci:

Partition of a set of 83586 objects. Total size = 6437744 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0  44928  54  3316108  52   3316108  52 str

Jednak ślad pamięci pozostaje niezmieniony:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 8225 root      16   0  195m 192m 3432 S  0.0 11.3   0:13.46 python
...

Dlaczego istnieje tak duża rozbieżność między śladem pamięci fizycznej pytona a rozmiarem stosu pytonów?

questionAnswers(4)

yourAnswerToTheQuestion