Google Groups Home
Help | Sign in
Ukončení zaneprázdněného threadu
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  6 messages - Collapse all
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
Jakub Lužný  
View profile
 More options Apr 24, 12:32 pm
Newsgroups: cz.comp.lang.python
From: "Jakub Lužný" <limot...@gmail.com>
Date: Thu, 24 Apr 2008 18:32:51 +0200
Local: Thurs, Apr 24 2008 12:32 pm
Subject: [python] Ukončení zaneprázdněného threadu
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 :)"


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Věroslav Kaplan  
View profile
 More options Apr 24, 2:39 pm
Newsgroups: cz.comp.lang.python
From: "Věroslav Kaplan" <veros.kap...@gmail.com>
Date: Thu, 24 Apr 2008 20:39:56 +0200
Local: Thurs, Apr 24 2008 2:39 pm
Subject: Re: [python] Ukončení zaneprázdněného threadu
Jak zabít thread netuším, ostatně soudím, že by si to měl thread
hlídat sám a ukončit se po požádání jiným threadem.

Pokud stačí, aby  po skončení hlavního threadu skončil celý proces,
hledej klíčové slovo daemonic v modulu threading. Threadu tím můžeš
nastavit příznak, že proces na něj nemá při ukončení čekat.

--VK

2008/4/24 Jakub Lužný:


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
superman  
View profile
 More options Apr 24, 3:36 pm
Newsgroups: cz.comp.lang.python
From: superman <f...@centrum.cz>
Date: Thu, 24 Apr 2008 21:36:01 +0200
Local: Thurs, Apr 24 2008 3:36 pm
Subject: Re: [python] Ukončení zaneprázdněného threadu
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):


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Jan Janech  
View profile
 More options Apr 24, 4:34 pm
Newsgroups: cz.comp.lang.python
From: Jan Janech <de...@atlas.sk>
Date: Thu, 24 Apr 2008 22:34:11 +0200
Local: Thurs, Apr 24 2008 4:34 pm
Subject: Re: [python] Ukončení zaneprázdněného threadu
http://sebulba.wikispaces.com/recipe+thread2

--

____________________________
Ing. Jan Janech
Katedra softverovych technologii
Fakulta riadenia a informatiky
Zilinska Univerzita


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
bystrou...@seznam.cz  
View profile
 More options Apr 25, 10:13 am
Newsgroups: cz.comp.lang.python
From: Bystrou...@seznam.cz
Date: Fri, 25 Apr 2008 16:13:36 +0200 (CEST)
Local: Fri, Apr 25 2008 10:13 am
Subject: Re: [python] Ukončení zaneprázdněného threadu
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..


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
superman  
View profile
 More options Apr 25, 11:28 am
Newsgroups: cz.comp.lang.python
From: superman <f...@centrum.cz>
Date: Fri, 25 Apr 2008 17:28:28 +0200
Local: Fri, Apr 25 2008 11:28 am
Subject: Re: [python] Ukončení zaneprázdněného threadu
Proč by to mělo být bezpečnostní riziko? Je na Vás, jakožto tvůrci
programu, zda vůbec dovolíte externímu programu sestřelit thread, nebo
ne. Uvědomte si, že existují něco jako přístupová práva v každém
operačním systému, a není nutné dovolit sestřelení threadu nikým jiným,
než si sám přejete. A kromě toho se tu bavíme o sestřelení threadu jiným
threadem v rámci jednoho procesu.

Neuvolněná paměť v rámci procesu je něco co vzniká naprosto běžně. Staší
neuvolnit kus paměti. Pokud k paměti nepřistupujete, systém jí brzy
odswapuje na disk a z fyzické paměti RAM neubírá. Akorát ubírá místo v
adresovém prostoru procesu (a nikde jinde). Po skončení procesu
samozřejmě systém uklidí naprosto vše.

Ale je to bezpečnostní chyba, nebo raději řekněme problém pro programy
co se neumějí vypořádat s nedostatkem paměti - ale je to chyba samotného
programu. Problém mívají obecně jazyky jako typu Python, Java, C#, Perl,
a další, které prostě neumí nedostatek paměti nijak rozumně vyřešit, a v
zásadě pouze krachnou. V jazycích jako je asm, C, C++, Ada, Fortran, a
další je možné bez problémů situaci, kdy dojde paměť, nebo adresovatelný
prostor procesu zvládnout a pokračovat v běhu - ba se dokonce zotavit a
bezpečně jet. Ovšem programátor ten program tak musí napsat.

Nedávno jsem takto prolomil "neprůstřelný" firewall Kerio Personal
Firewall. Stačilo k tomu zabrat veškerou paměť a počkat několik sekund.
Uvnitř Kerio firewallu psaném v C++ došlo k pokusu o alokaci bloku
paměti při další síťovém spojení - alokace se nezdařila, vyhodila
vnitřní výjimku typu bad_alloc, kterou programátoři Keria neošetřili a
celý firewall jako program se ukončil, spadl na ústa a připojení k
internetu najednou byla zcela nachráněné. Jak jednoduché, jak účinné. Už
vím, jak bych napsal virus, který se dostane na síť při puštěném Kerio
firewallu (pro objektivitu musím napsat, že by to nejspíš neustála
naprostá většina firewallů.).

Miloslav Ponkrác

Bystrou...@seznam.cz napsal(a):


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »

Create a group - Google Groups - Google Home - Terms of Service - Privacy Policy
©2008 Google