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

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

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

我不太了解线程是如何工作的,但我只想每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()


浮云间
浏览 1714回答 3
3回答

慕码人2483693

最好的方法是启动计时器线程一次。在计时器线程中,您将编写以下代码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 timerstopFlag.set()

暮色呼如

使用计时器线程-from threading import Timer,Thread,Eventclass 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()

智慧大石

从…python中setInterval的等价性:import threadingdef setInterval(interval):     def decorator(function):         def wrapper(*args, **kwargs):             stopped = threading.Event()             def loop(): # executed in another thread                 while not stopped.wait(interval): # until stopped                     function(*args, **kwargs)             t = threading.Thread(target=loop)             t.daemon = True # stop if the program exits             t.start()             return stopped        return wrapper    return decorator用法:@setInterval(.5)def function():     "..."stop = function() # start timer, the first call is in .5 secondsstop.set()      # stop the loopstop = function() # start new timer# ...stop.set()或者这里相同的功能,但作为独立功能而不是装饰器。:cancel_future_calls = call_repeatedly(60, print, "Hello, World")# ...cancel_future_calls()下面是如何在不使用线程的情况下做到这一点.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python