🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.python
Article #27272

Re: Odwołaniewątku do samego siebie

#27272
From: Daniel Mróz
Date: Wed, 27 Jan 2010 13:26
74 lines
3191 bytes
On 27.01.2010, królewna <krolewna@ee.pl> wrote:
> Na końcu wspomniałeś coś o lockach. Ja chcąc kasować procesy z listy 
> niby je usuwam ale pamięć przez nie zajmowana dalej pozostaje zajęta. 
> Gdy drukuje sobie procesy, które dalej tkwią w pamięci przez 
> gc.get_objects() zauważam, że jest tam rzeczywiście sporo locków (nie 
> wiem jakich ani od czego bo ja żadnych nie tworzę).
Ja pisałem o innych lockach. Jeśli wątki mają macać obiekt dostępny dla nich
wszystkich, to trzeba blokować (np. poprzez threading.Lock()) aby mieć pewność,
że tylko jeden wątek będzie operował na obiekcie w tym samym czasie.

> Głównie zależy mi na tym aby zwolnić pamięć zajętą przez te wątki gdyż 
> będą one tworzone dynamicznie i z czasem jeśli nie nastąpi zwolnienie, 
> python po prostu zawali mi całą pamięć.
>
> Przykładowo kod:
>
> def a(i):
> 	pass
>
> ko = []
>
> for i in range(0, 100000):
> 	ko.append(threading.Thread(target=a, args=(1,)))
> for i in ko:
> 	i.start()
> 	i.join()
> for i in range(0,100000):
> 	k = ko.pop()
> 	del k
> del ko
>
> powoduje zajęcie prawie 170MB pamięci.
Wywołanie "del" nie gwarantuje Ci, że usuwany obiekt zwolni w tym
czasie pamięć. Nastąpi to dopiero wtedy, kiedy GC uzna, że można to zrobić
(jeśli będą jakieś zapętlone referencje, to może to nigdy nie nastąpić).
"del" jedynie oznacza dany obiekt jako nieużywany.

A co do kodu, to trochę źle to robisz. Popatrz na coś takiego:



class MyThread(threading.Thread):
    def __init__(self, arg):
	threading.Thread.__init__(self)
	self.arg = arg

    def run(self):
	do_something_with(self.arg)


ko = []
for i in xrange(100000):
    ko.append(MyThread(1))
    ko[-1].start()

while len(ko):
    thr.join(0.25)
    if not thr.isAlive():
        ko.remove(thr)



Jeśli masz jakieś pytania do powyższego przykładu, daj znać.



Pozdrawiam
Beorn

-- 
Daniel 'Beorn' Mróz <beorn@alpha.pl>    http://127.0.0.1/beorn
[GIT d s:- a-@ C++++ UL++++$ P+ L++++ E--- W+ N+++ o? K- w---]
[O- M- V!  PS+ PE++ Y+ PGP++ t- 5  X R !tv b+ DI D++ G++ e h*]
[                          r++  y+                           ]
Technical Details
Message-ID: <slrnhm0fqc.g56.beorn@pino.cyberdeck.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news2.icm.edu.pl!news.task.gda.pl!newsfeed00.sul.t-online.de!t-online.de!plix.pl!newsfeed1.plix.pl!wsisiz.edu.pl!newsfeed.atman.pl!not-for-mail
References: <hjmvn8$j0k$1@achot.icm.edu.pl> <hjp5rd$1ge$1@news.task.gda.pl> <hjpdhg$jvg$1@news.task.gda.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news2.icm.edu.pl!news.task.gda.pl!newsfeed00.sul.t-online.de!t-online.de!plix.pl!newsfeed1.plix.pl!wsisiz.edu.pl!newsfeed.atman.pl!not-for-mail
From: Daniel Mróz <beorn@alpha.pl>
Newsgroups: pl.comp.lang.python
Subject: Re: Odwołaniewątku do samego siebie
Date: Wed, 27 Jan 2010 13:26:52 +0000 (UTC)
Organization: A tak se walimy młotkami d:-/
Lines: 74
Message-ID: <slrnhm0fqc.g56.beorn@pino.cyberdeck.pl>
References: <hjmvn8$j0k$1@achot.icm.edu.pl> <hjp5rd$1ge$1@news.task.gda.pl> <hjpdhg$jvg$1@news.task.gda.pl>
NNTP-Posting-Host: fw2.itvp.pl
Mime-Version: 1.0
X-Trace: node2.news.atman.pl 1264598812 32088 217.17.39.4 (27 Jan 2010 13:26:52 GMT)
X-Complaints-To: usenet@atman.pl
NNTP-Posting-Date: Wed, 27 Jan 2010 13:26:52 +0000 (UTC)
User-Agent: slrn/0.9.8.1pl2.1 (Linux)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit