2017-07-07 182 views
0

由于threading.TimerThread一个子类,我希望在这个脚本.join()会导致代码打印“纬”一旦第二,不断:threading.Timer join()立即退出?

import threading 

def target_action(arg): 
    print arg 

def start_timer_proc(interval, arg): 
    timer = threading.Timer(interval, target_action, [arg]) 
    timer.start() 
    return timer 

def main(): 
    timer = start_timer_proc(1.0, "woof") 
    timer.join() 
    print("...exiting") 

main() 

相反,它打印出“汪汪”一次然后终止(没有任何错误消息)。我错过了什么?

+0

糟糕!在仔细阅读文档时,Timer不会循环 - 它只运行一次。这解释了我所看到的。除非有人低估了我,否则我会离开这个问题,以便其他人可以给出答案! :) –

回答

1

这是我真正想要的(上https://stackoverflow.com/a/12435256/558639松散的基础):

import threading 

class IntervalTimer(threading.Thread): 
    def __init__(self, target_action, interval, args=[]): 
     threading.Thread.__init__(self) 
     self.event = threading.Event() 
     self.target_action = target_action 
     self.interval = interval 
     self.args = args 

    def start(self): 
     while not self.event.wait(self.interval): 
      self.target_action(*self.args) 

def target_action(arg): 
    print arg 

def start_timer_proc(interval, arg): 
    timer = IntervalTimer(target_action, interval, [arg]) 
    timer.start() 
    return timer 

def main(): 
    timer = start_timer_proc(1.0, "woof") 
    print timer 
    timer.join() 
    print("...exiting") 

main() 

注意,我不需要改变我的target_action()start_timer_proc()方法,只是实例化一个IntervalTimer,而不是一个Timer