在不运行函数

时间:2017-04-11 15:53:19

标签: python timer

在Python中是否可以使用线程创建/设置定时器,但是在调用thread.start()之前不能运行该函数?我已经设置了永久定时器,如下所示:

class perpetualTimer():
  enabled = False
  Interval = 0
  def __init__(self,t,hFunction):
      print("init")
      self.t=t
      self.Interval = t
      self.hFunction = hFunction
      self.thread = Timer(self.t,self.handle_function)

  def handle_function(self):
      print("handle")
      print(self.hFunction.__name__)
      self.hFunction()
      self.thread = Timer(self.t,self.handle_function)
      self.thread.start()

  def start(self):
      print("start")
      self.thread = Timer(self.Interval,self.handle_function)
      self.thread.start()

  def stop(self):
      print("stop")
      self.thread.cancel()
def foo():
  print("foo")

然后创建它:

tmr = perpetualTimer(5,foo())

然后运行程序,我得到一个打印出“foo”,然后是“init”...不是我想要的......我只是想要它打印“init”

2 个答案:

答案 0 :(得分:0)

写作时

tmr = perpetualTimer(5,foo())

你说“在5上调用perpetualTimer以及调用foo的结果”。这就是为什么在“init”之前打印“foo”的原因。

看着你的代码,在我看来,你正在寻找

tmr = perpetualTimer(5,foo)

仅传递对函数的引用!

答案 1 :(得分:0)

发现问题:对perpetualTimer(5,foo())的调用实际应该是

 tmr = perpetualTimer(5,foo)