使用重複計時器進行執行緒
為了每隔「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中文網其他相關文章!