Dokumentacja garbage collectora w Pythonie [zamknięta]


132

Szukam dokumentów, które szczegółowo opisują, jak działa wyrzucanie elementów bezużytecznych w Pythonie.

Interesuje mnie, co jest zrobione w jakim kroku. Jakie obiekty znajdują się w tych 3 kolekcjach? Jakie rodzaje obiektów są usuwane na każdym etapie? Jaki algorytm jest używany do znajdowania cykli referencyjnych?

Tło: wdrażam wyszukiwania, które muszą zakończyć się w krótkim czasie. Kiedy śmieciarz zaczyna zbierać najstarsze pokolenie, jest to „dużo” wolniejsze niż w innych przypadkach. Zajęło to więcej czasu niż jest przeznaczone do wyszukiwania. Szukam, jak przewidzieć, kiedy zbierze najstarsze pokolenie i jak długo to potrwa.

Łatwo jest przewidzieć, kiedy zbierze najstarsze pokolenie z get_count()i get_threshold(). Tym też można manipulować set_threshold(). Ale nie widzę, jak łatwo zdecydować, czy lepiej zrobić collect()na siłę, czy poczekać na zaplanowany odbiór.

Odpowiedzi:


126

Nie ma ostatecznego źródła informacji na temat tego, jak Python zbiera śmieci (poza samym kodem źródłowym), ale te 3 linki powinny dać całkiem niezły pomysł.

Aktualizacja

Źródło jest w rzeczywistości bardzo pomocne. To, ile z tego wyjdziesz, zależy od tego, jak dobrze czytasz C, ale komentarze są w rzeczywistości bardzo pomocne. Przejdź do collect()funkcji, a komentarze dobrze wyjaśniają proces (choć pod względem technicznym).


3
CPython nie używa już Subversion. Przeszli na Mercurial hostowany na hg.python.org. Ponieważ nie mogę dowiedzieć się, jak utworzyć łącze do aktualnej wersji pliku w tej witrynie, utworzę łącze do nieoficjalnego serwera lustrzanego GitHub zamiast tego .
Marius Gedminas

1
Nieważne, zorientowałem się, jak utworzyć link do najnowszego gcmodule.c na oficjalnej stronie. Nadal uważam, że GitHub jest bardziej czytelny.
Marius Gedminas

Ucz się dużo. Thx
gus

1
Pierwszy odsyłacz nie wskazuje niczego związanego z wyrzucaniem elementów bezużytecznych w Pythonie. Zaktualizuj łącze.
Manish Barnwal
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.