web-dev-qa-db-fra.com

Python Threading avec un objet Event

J'ai vu beaucoup de scripts Python qui utilisent des threads dans une classe et beaucoup d'entre eux utilisent la threading.Event(). Par exemple:

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)

Dans la boucle while, pourquoi vérifient-ils la condition s'ils ne définissent pas self.event?

24
user2724899

Parce que quelqu'un d'autre le réglera.

Vous démarrez généralement un thread dans une partie de votre application et continuez à faire ce que vous faites:

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

Le fil fait ses trucs pendant que vous faites vos trucs. Si vous souhaitez terminer le fil que vous venez d'appeler:

thread.event.set()

Et le fil va s'arrêter.

La réponse est donc: event, dans ce cas, n'est pas utilisé pour contrôler le thread depuis l'intérieur de l'objet thread lui-même. Il est utilisé pour contrôler le thread depuis l'extérieur (depuis l'objet qui contient la référence au thread).

33
Viktor Kerkez