首頁  >  文章  >  後端開發  >  為什麼「threading.Timer」重複啟動時會引發「RuntimeError」?

為什麼「threading.Timer」重複啟動時會引發「RuntimeError」?

DDD
DDD原創
2024-11-10 17:20:03308瀏覽

Why Does `threading.Timer` Raise a `RuntimeError` When Repeatedly Started?

使用重複計時器進行執行緒

為了每隔「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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn