2012-11-22 4 views

答えて

11

のは、それを試してみましょう:上記

import threading 
import time 

class ThreadWorker(threading.Thread): 

    def run(self): 
     print "Statement from a thread!" 
     raise Dead 


class Main: 

    def __init__(self): 
     print "initializing the thread" 
     t = ThreadWorker() 
     t.start() 
     time.sleep(2) 
     print "Did it work?" 


class Dead(Exception): pass 



Main() 

コードは次のような結果が得られますので、

> initializing the thread 
> Statement from a thread! 
> Exception in thread 
> Thread-1: Traceback (most recent call last): File 
> "C:\Python27\lib\threading.py", line 551, in __bootstrap_inner 
>  self.run() File ".\pythreading.py", line 8, in run 
>  raise Dead Dead 
> ----- here the interpreter sleeps for 2 seconds ----- 
> Did it work? 

を、あなたの質問への答えは唯一のスレッド上げ例外がクラッシュしたということですそれはプログラム全体ではなく、存在します。 threadingドキュメントから

+0

私は同時スレッドプールを使用しています。スレッドが殺された場合、新しいスレッドはスレッドプールに生成されますか? –

5

スレッドの活動が開始されると、スレッドが 「生きている」とみなされます。 run()メソッドが正常に終了するか、処理されない例外が発生した場合には、その実行が停止します。 is_alive() メソッドは、スレッドが生きているかどうかをテストします。

も:スレッドが終了するまで

は(タイムアウト=なし)

待ちに参加。これにより、join()メソッドが呼び出されるスレッドが終了するまで( が正常または未処理の例外を介して)、またはオプションの タイムアウトが発生するまで、呼び出し元のスレッドがブロックされます。

つまり、キャッチされない例外はスレッドを終了する方法であり、親スレッドのjoin呼び出しで検出されます。

関連する問題