Tabela zawiera około dziesięć milionów wierszy.Dlaczego iterowanie przez duży Django QuerySet pochłania ogromne ilości pamięci?
for event in Event.objects.all():
print event
Powoduje to, że zużycie pamięci stale rośnie do 4 GB lub mniej, w którym to momencie wiersze są drukowane szybko. Długie opóźnienie przed pierwszym wydrukiem zaskoczyło mnie - spodziewałem się, że wydrukuje się niemal natychmiast.
Próbowałem również Event.objects.iterator()
, który zachowywał się w taki sam sposób.
Nie rozumiem, co Django ładuje do pamięci lub dlaczego to robi. Spodziewałem się, że Django przejdzie przez wyniki na poziomie bazy danych, co oznacza, że wyniki będą drukowane w przybliżeniu na stałym poziomie (a nie wszystkie od razu po długim oczekiwaniu).
Co źle zrozumiałem?
(nie wiem, czy to istotne, ale używam PostgreSQL).
Na mniejszych maszynach może to nawet spowodować razu "Zabity" do powłoki django lub serwera – Stefano