Wygląda na to, że python3.5 nie całkowicie zwalnia pamięć dowolnego usuniętego obiektu, może to być spowodowane tym, że pyton wewnętrznie utrzymuje pewien rodzaj puli memorialów w celu ponownego użycia, jednak nie chcę ich ponownie używać i chcę je zwolnić aby udostępnić pamięć dla innych programów działających na Linuksie.Jak zwolnić pamięć usuniętego obiektu Pythona?
>>> psutil.Process().memory_info().rss/2**20
11.47265625
>>> d = {x:x for x in range(10**7)}
>>> psutil.Process().memory_info().rss/2**20
897.1796875
>>> del d
>>> gc.collect()
0
>>> psutil.Process().memory_info().rss/2**20
15.5859375
To tylko zabawny przykład, prawdziwym problemem jest uruchomiony serwer, zabierający 20GB niewymuszonej pamięci.
Oto kolejny przykład: (WD1 jest DICT z dict z kluczami tekstowymi)
>>> psutil.Process().memory_info().rss/2**20
28.1796875
>>> wd1 = {x:{i:i for i in d} for x in k}
>>> psutil.Process().memory_info().rss/2**20
682.78125
>>> del wd1
>>> psutil.Process().memory_info().rss/2**20
186.21484375
Nie masz kontroli nad zarządzaniem pamięcią w pythonie (lub innym nowoczesnym języku z automatycznym lub półautomatycznym zarządzaniem pamięcią). – Daniel
To jest naprawdę problem, kiedy musimy używać Pythona w programie serwera, jak zmodyfikować kod źródłowy python3.5, aby był on dostępny na serwerach? –
Po prostu myśl, ale co z wykorzystaniem podprocesu lub modułów wieloprocesowych do wykonania dużych porcji pracy? Gdy proces linuksowy zostanie zakończony, czy nie odzyskasz całej swojej pamięci? * jak zmodyfikować źródło python3.5 ... * wydaje mi się, że to nie starter, przynajmniej dla mnie. –