2013-08-28 7 views
14

私はクラス内でスレッドを使用する多くのPythonスクリプトを見てきましたが、その多くはthreading.Event()を使用しています。例えば:彼らはself.eventを設定しない場合whileループではPython Threading With Eventオブジェクト

class TimerClass(threading.Thread): 
    def __init__(self): 
     threading.Thread.__init__(self) 
     self.event = threading.Event() 

    def run(self): 
     while not self.event.is_set(): 
      print "something" 
      self.event.wait(120) 

、なぜ彼らは条件をチェックしますか?

答えて

21

他の人が設定するためです。

あなたは、一般的に、アプリケーションの一部でスレッドを開始し、あなたが何でもしていき:

thread = TimerClass() 
thread.start() 
# Do your stuff 

スレッドはあなたのものを行う一方で、それは、ものだし。スレッドを終了するには、

thread.event.set() 

スレッドが停止します。

この場合、イベントは、この場合、スレッドオブジェクト自体の内部からスレッドを制御するために使用されません。これは、(スレッドへの参照を保持するオブジェクトからの)スレッドを外部から制御するために使用されます。

+0

OPの例では、self.event.wait(120)は、イベントが120秒前にset()されない限り、ループをやり直すために120秒待つことを意味します。待機(120)が戻り、基本的にループは印刷せずに終了しますか?そしてイベントが決してset()にならなければ、120秒すべての "何か"を印刷しますか? – gunit

+1

@gunitイベントが設定されるまで120秒ごとに「何か」が印刷されます。イベントが設定されると、ループは終了します。 –