Moc tomu nerozumím, takže se omlouvám, jestli budu plácat nesmysly; Není to bezpečnostní chyba? Pokud si něco vezme paměť a OS jí po sestřelení neuvolní, zdá se mi to jako potenciální riziko, které by mohlo být zneužito nějakým škodlivým virem..
> ------------ Původní zpráva ------------ > Od: superman <[EMAIL PROTECTED]> > Předmět: Re: [python] Ukončení zaneprázdněného threadu > Datum: 24.4.2008 21:43:38 > ---------------------------------------- > Odstřelení threadu se obecně lidi brání, protože to je dost drastická > věc, která mimo jiné může uvést i Váš program do neschopnosti dál > pokračovat. Uvědomte si, že každý thread má svůj zásobník, a při > násilném odstřelení threadu operační systém většinou zásobník neuklízí, > ale nechá ho jakožto blok paměti v adresovém prostoru procesu být a > nikdy ho neuvolní. Je to proto, že na zásobníku mohou být proměnné a > data, které používají jiné thready, a pokud thread odstřelíte násilně, > operační systém se domnívá, že je to nouzová akce, a že ostatní thready > netuší o tom nic. A proto jim nechá zásobník s daty k dispozici, pokud > by je náhodou jiné thready používaly. > > Zatímco při slušném způsoby ukončení, kdy se thread sám ukončí, operační > systém po něm uklidí vše i zásobník. > > V praktickém programu pak zejména ve 32 bitovém systému máte omezený > adresový prostor obvykle kolem 2 GB, a po určitém poměrně malém počtu > takto násilně odstřelených threadu (kolem tisícovky) zaplníte celý > adresový prostor procesu neuklizenými zásobníky, které nemáte jak > uvolnit a můžete se dostat do stavu, kdy prostě program nebude schopen > pokračovat v běhu, neboť nebude mít kam namapovat paměť. > > Proto se thready opravdy násilně neodstřelují, ale pouze se threadu > nastaví příznak "hele threade, ukonči se prosím". A běžící thread > příznak dostatečně často čte, řekněme třeba stokrát za sekundu, a > jakmile zjistí, že by se měl ukončit, tak prostě se sám ukončí, čím se > předejde výžše uvedenému zlu. > > Miloslav Ponkrác > > > Jakub Lužný napsal(a): > > Zdarec :-) > > > > Vytvořím vedlejší thread pomocí modulu threading a dám mu za úkol čekat. > > Spustím ho, a v hlavním threadu dám pořád dokola něco vypisovat. Když potom > > ale dám KeyboardInterrupt, tak se hlavní thread ukončí, ale vedlejší > > zůstane > > viset na tom čekání. Je nějakej způsob, jak thread ukončit i s tím čekáním? > > > > #!/usr/bin/env python > > import threading > > > > def thread1(): > > while(1): > > čekej_do_nekonečna() > > > > t1 = threading.Thread(target = thread1) > > t1.start() > > > > while(1): > > print "blbnu :)" > > _______________________________________________ > > Python mailing list > > [email protected] > > http://www.py.cz/mailman/listinfo/python > > > > > > > > _______________________________________________ > Python mailing list > [email protected] > http://www.py.cz/mailman/listinfo/python > > > _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
