Wpis z mikrobloga

@tptak:

nie zwalnia pamięci.


Nie miałem nigdy problemów z pamięcią. W przeciwieństwie do aplikacji napisanych w Javie ( ͡° ͜ʖ ͡°)

Z wątkami coś jest nie teges.


Z wątkami wszystko teges, tylko Ty nie wiesz o co chodzi ;)

A chodzi Ci zapewne o GIL (Global Interpreter Lock). I to jest kwestia interpretera a nie języka. I występuje też w Rubym. I stąd też program wielowątkowy
@morsik: być może. Ja miałem problemy takie, że pamięć była zwalniana i ponownie używana wewnątrz procesu, ale sam proces jak spuchł to już nie oddawał do systemu. Może to teraz uległo zmianie.

Lubię pythona, żeby nie było. Tylko nie stosujemy go do głównej funkcjonalności w firmie.
@chrsec: @Jone: http://effbot.org/pyfaq/why-doesnt-python-release-the-memory-when-i-delete-a-large-object.htm
Kiedyś pisałem ewolucyjny, wielowyspowy algorytm optymalizacji wielokryterialnej. Zacząłem w Pythonie. Kod stawał w miejscu po godzinie. Dodałem zwalnianie z użyciem del, ale to niczego nie zmieniło. Miałem pierdyliard danych gdzieś po drodze przy każdej iteracji, po czym nie radził sobie za chwilę. Szukałem więcej podpowiedzi i znalazłem tylko wypowiedzi, że wewnątrz pamięć zostanie ponownie wykorzystana, ale na zewnątrz już oddana nie będzie, a przynajmniej nie ma się
Konsekwencja pythonowego gc. Zawsze można uruchomić full collection przez:
import gc
gc.collect()
i cała(nie używana) pamięć zostaje zwolniona.
@tptak: Faktycznie. Takiego czegoś nigdy bym się w pythonie nie podjął ;) Jest strasznie wolny. Teraz zajmuje się trochę numeryką to bardzo szybko python pękł i musieliśmy przejść do C.

Jeżeli chodzi o takie akcje to można też zawsze skompilować source pythona w trybie debugowania i puścić np pod valgrindem.