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
