web-dev-qa-db-ja.com

Python Eventオブジェクトのスレッド化

私は、クラスでスレッドを使用する多くのPythonスクリプトを見て、それらの多くはthreading.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)

whileループで、self.eventを設定しない場合に条件をチェックするのはなぜですか?

24
user2724899

他の誰かがそれを設定するからです。

通常、アプリケーションの一部でスレッドを開始し、実行することを引き続き実行します。

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

あなたがあなたのことをしている間、スレッドはそれを行います。スレッドを終了する場合は、次を呼び出します。

thread.event.set()

そして、スレッドは停止します。

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

33
Viktor Kerkez