[python] Uvolnění paměti

slush slush na centrum.cz
Čtvrtek Květen 29 21:02:11 CEST 2008


Dovolil jsem si pred chvili udelat sadu testu garbage collectoru v pythonu.
Zarazilo me totiz, ze by se python choval nejak vyrazne hur nez PHP, kde
jsem sveho casu psal pametove hodne narocne operace (take miliony iteraci).
A stalo se jak jsem ocekaval, tedy python drzi jako skala a nezaznamenal
jsem zadny narust spotreby pameti (nad ramec stovek MB, ktere jsem postupne
alokoval a odalokovaval apod).

Takze pokud nejaky vypocet uzira pamet a zadne cisteni objektu nepomaha,
hledal bych vinika jinde. Predpokladam, ze vypocty ve SciPy jsou kvuli
optimalizaci psany v Ccku a jak se vsichni shodneme, napsat pametove
neprustrelny C kod vyzaduje zkuseneho programatora. Takze bych spis ocistil
python a hodil to na vrub memory leakum daneho modulu....

Marek

2008/5/29 superman <feed na centrum.cz>:

> Obávám se, že jste narazil na limit programovacích jazyků, které dělají
> věci automaticky. Prakticky v žádném jazyku, který striktně paměť řídí
> garbage collectorem není 100%ní kontrola uvolňování objektů.
>
> Můžete zkusit modul gc a metodu collect, případně nastavit meze
> (thresholds) pro všechny generace. Python používá 3 generaci, přičemž v
> generaci 0 jsou nejčerstvější a nejmladší objekty, a gc jí uklízí
> nejčastěji. V generaci 1 jsou stálejší objekty, které v Pythonu jsou
> delší dobu a v generaci 2 jsou "usádlené" objekty, které jsou v kódu
> Pythonu dlouhodobě potřeba.
>
> Miloslav Ponkrác
>
>
>
> 302302 napsal(a):
> > Používám knihovnu OpenOpt ze SciPy a výpočty mnohokrát opakuji (>100000).
> Použiji tedy klasicky
> >
> > for i in xrange(0,100000):
> >     vypocet()
> >
> > při vypočtu vznikají objekty, iterace, atp. a hromadí se v paměti i
> přesto, že je už dále nepotřebuji. Po chvíli mám zaplněnou celou paměť, čímž
> samozřejmě značně snížím rychlost výpočtů. Otázka tedy je jak lze donutit
> python, aby uvolňoval nepoužívanou paměť.
> > Funkce del maže jen reference a bohužel neuvolňuje samotnou paměť. Lze
> tedy nějak nastavit Garbage Collector, nebo nějak ručně mazat proměnné?
> >
> > Díky
> > Czenek
> >
> > Python 2.5.1.
> > Ubuntu 7.10.
> >
> > _______________________________________________
> > Python mailing list
> > Python na py.cz
> > http://www.py.cz/mailman/listinfo/python
> >
> >
> >
>
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: http://www.py.cz/pipermail/python/attachments/20080529/123f2052/attachment.htm 


Další informace o konferenci Python