首頁 >後端開發 >Python教學 >如何使用'threading.Timer”實現循環函數而不出現'運行時錯誤:線程只能啟動一次”問題?

如何使用'threading.Timer”實現循環函數而不出現'運行時錯誤:線程只能啟動一次”問題?

Patricia Arquette
Patricia Arquette原創
2024-11-12 05:13:01719瀏覽

How to Implement a Recurring Function with 'threading.Timer' Without the 'RuntimeError: threads can only be started once' Issue?

使用'threading.Timer' 實現循環函數

創建一個每'n' 秒重複運行的函數是以下領域的常見要求:程式設計.然而,為此目的使用「threading.Timer」可能會帶來挑戰。

一種方法涉及多次啟動計時器線程,如下面的偽代碼所示:

t=threading.timer(0.5,function)
while True:
    t.cancel()
    t.start()

但是,這可能會導致「RuntimeError:線程只能啟動一次」錯誤,因為「threading.Timer」物件只能啟動一次。為了解決這個問題,我們可以建立一個自訂執行緒類別來處理定時器的重複執行和取消:

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

在主程式碼中,我們可以建立一個事件來控制定時器執行緒:

stopFlag = Event()
thread = MyThread(stopFlag)
thread.start()
# this will stop the timer
stopFlag.set()

透過使用這種方法,我們可以根據需要啟動和停止重複函數,而不會遇到「RuntimeError」問題。

以上是如何使用'threading.Timer”實現循環函數而不出現'運行時錯誤:線程只能啟動一次”問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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