2013-08-28 111 views
14

我见过很多使用线程的Python脚本,其中很多脚本使用threading.Event()。例如:事件对象的Python线程处理

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

回答

21

因为别人会设置它。

你一般启动一个线程应用程序中的一部分,并继续做你做的事:

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

线程确实它的东西,而你做你的东西。如果你想终止你只是打电话的线程:

thread.event.set() 

线程将停止。

所以答案是:在这种情况下,事件不用于从线程对象本身内部控制线程。它用于从外部控制线程(从持有引用的对象到线程)。

+0

在OP的例子中,self.event.wait(120)是否意味着它将等待120秒来重做循环,除非事件在120秒之前已经设置(),在此之前self.event。等待(120)将返回,基本上循环将不再打印而退出?如果事件永远不会被设置(),它只会打印“东西”的所有内容120秒? – gunit

+1

@gunit它将每120秒打印一些“东西”,直到事件被设置。事件设置时,循环将退出。 –