Popraw zarządzanie pamięcią w Pythonie
Próbowałem odczytać plik logów o rozmiarze 2 GB. Użyłem list comprehension. Mój laptop się zawiesił. Zabrakło pamięci.
Wyciągnąłem z tego lekcję. List comprehensions są typu eager. Ładują wszystko naraz. Generator expressions są typu lazy. Ładują elementy jeden po drugim.
Używaj operatora walrus (:=). Przechowuje on wartość dla Ciebie. Możesz użyć tej wartości dwukrotnie w jednej linii. Oszczędza to czas procesora. Przestań wywoływać kosztowne funkcje dwa razy.
Przestań opakowywać generatory w list() przy funkcjach takich jak sum, max czy min. To strata zasobów. Generatory utrzymują niskie zużycie pamięci.
Zachowaj ostrożność. Generatory są jednorazowe. Wyczerpują się po jednym przebiegu. Jeśli potrzebujesz tych danych ponownie, utwórz nowy generator lub stwórz listę.
Pisz kod z myślą o rzeczywistym obciążeniu:
- Używaj generatorów do strumieni dużych danych.
- Używaj operatora walrus, aby zmniejszyć obciążenie procesora.
- Pamiętaj, że generatory się wyczerpują.
Przejrzyj swój kod już dziś. Zamień listę na generator.