Python线程计时器-每n秒重复一次函数

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (395)

我在python计时器上遇到了困难,非常希望得到一些建议或帮助:

我不太了解线程是如何工作的,但我只想每0.5秒启动一个函数,并能够启动、停止和重置计时器。

然而,我一直RuntimeError: threads can only be started once当我执行threading.timer.start()两次。这附近有工作吗?我试着申请threading.timer.cancel()每次开始之前。

伪码:

t=threading.timer(0.5,function)
while True:
    t.cancel()
    t.start()
提问于
用户回答回答于

最好的方法是启动计时器线程一次。在计时器线程中,您将编写以下代码

class MyThread(Thread):
    def __init__(self, event):
        Thread.__init__(self)
        self.stopped = event

    def run(self):
        while not self.stopped.wait(0.5):
            print("my thread")
            # call a function

在启动计时器的代码中,您可以set停止事件以停止计时器。

stopFlag = Event()
thread = MyThread(stopFlag)
thread.start()
# this will stop the timer
stopFlag.set()
用户回答回答于

使用计时器线程-

from threading import Timer,Thread,Event


class perpetualTimer():

   def __init__(self,t,hFunction):
      self.t=t
      self.hFunction = hFunction
      self.thread = Timer(self.t,self.handle_function)

   def handle_function(self):
      self.hFunction()
      self.thread = Timer(self.t,self.handle_function)
      self.thread.start()

   def start(self):
      self.thread.start()

   def cancel(self):
      self.thread.cancel()

def printer():
    print 'ipsem lorem'

t = perpetualTimer(5,printer)
t.start()

这是可以阻止的t.cancel()

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励