使用重复计时器进行线程
为了每隔“n”秒定期执行一个函数,Python threading.Timer 类提供了一个实用的解决方案。然而,当您需要重复启动、停止和重置时,使用此计时器可能会很棘手。
假设您想每 0.5 秒触发一个函数。您可以尝试以下操作:
import threading def function_to_execute(): # Your function code here t = threading.Timer(0.5, function_to_execute) while True: t.cancel() t.start()
但是,此代码将引发 RuntimeError,抱怨多次启动线程。这是为什么?
默认情况下,定时器线程的 start() 方法只能调用一次。但由于我们反复取消和重新启动计时器,所以遇到了这个问题。
创建可重用的计时器线程
要克服这个限制,更好的方法是仅启动一次计时器线程。在线程内部,我们将实现重复执行函数:
import threading class MyThread(threading.Thread): def __init__(self, event): threading.Thread.__init__(self) self.stopped = event def run(self): while not self.stopped.wait(0.5): # Execute your function here # Create a stop event stopFlag = threading.Event() # Start the timer thread thread = MyThread(stopFlag) thread.start()
通过此设置,计时器线程将每 0.5 秒连续执行一次函数。要停止计时器,只需设置 stopFlag 事件:
# Stop the timer stopFlag.set()
使用此方法,您可以根据需要重复启动、停止和重置计时器,而不会遇到 RuntimeError。
以上是为什么“threading.Timer”重复启动时会引发“RuntimeError”?的详细内容。更多信息请关注PHP中文网其他相关文章!