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.

Ante
źródło

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).

Rafe Kettler
źródło
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