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).<br>
<br>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....<br>
<br>Marek<br><br><div class="gmail_quote">2008/5/29 superman &lt;<a href="mailto:feed@centrum.cz">feed@centrum.cz</a>&gt;:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Obávám se, že jste narazil na limit programovacích jazyků, které dělají<br>
věci automaticky. Prakticky v žádném jazyku, který striktně paměť řídí<br>
garbage collectorem není 100%ní kontrola uvolňování objektů.<br>
<br>
Můžete zkusit modul gc a metodu collect, případně nastavit meze<br>
(thresholds) pro všechny generace. Python používá 3 generaci, přičemž v<br>
generaci 0 jsou nejčerstvější a nejmladší objekty, a gc jí uklízí<br>
nejčastěji. V generaci 1 jsou stálejší objekty, které v Pythonu jsou<br>
delší dobu a v generaci 2 jsou &quot;usádlené&quot; objekty, které jsou v kódu<br>
Pythonu dlouhodobě potřeba.<br>
<br>
Miloslav Ponkrác<br>
<br>
<br>
<br>
302302 napsal(a):<br>
<div><div></div><div class="Wj3C7c">&gt; Používám knihovnu OpenOpt ze SciPy a výpočty mnohokrát opakuji (&gt;100000). Použiji tedy klasicky<br>
&gt;<br>
&gt; for i in xrange(0,100000):<br>
&gt; &nbsp; &nbsp; vypocet()<br>
&gt;<br>
&gt; 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ěť.<br>

&gt; 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é?<br>
&gt;<br>
&gt; Díky<br>
&gt; Czenek<br>
&gt;<br>
&gt; Python <a href="http://2.5.1." target="_blank">2.5.1.</a><br>
&gt; Ubuntu 7.10.<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Python mailing list<br>
&gt; <a href="mailto:Python@py.cz">Python@py.cz</a><br>
&gt; <a href="http://www.py.cz/mailman/listinfo/python" target="_blank">http://www.py.cz/mailman/listinfo/python</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
<br>
_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@py.cz">Python@py.cz</a><br>
<a href="http://www.py.cz/mailman/listinfo/python" target="_blank">http://www.py.cz/mailman/listinfo/python</a><br>
</div></div></blockquote></div><br>