Python 執行緒模組中的 Timer 類
 
執行緒是併發執行多個執行緒以實現並行性的技術。在 Python 中,我們可以使用 threading 模組來實現執行緒化。現在,threading 模組有一個 Timer 類,可用於在 x 時間後執行某些操作或執行某些程式碼。在本文中,我們將通過示例瞭解如何使用該類並更好地理解它。我們將構建一個無限計時器。
Python 中的 threading.Timer 類
    
Timer 類是 Thread 類的子類,可用於在一些時間單位後執行程式碼。它接受兩個引數,即 interval 和 function。interval 是指程式碼應該執行的秒數,而 function 是在所需時間過去後應該呼叫的回撥函式。這個類有兩個重要的函式,即 start() 和 cancel()。start() 方法用於啟動計時器,cancel() 方法用於取消它。
計時器物件預設不啟動。我們必須呼叫 start() 方法來啟動它們。要停止正在執行的計時器,我們可以使用 cancel() 方法。
現在我們已經完成了理論,讓我們瞭解如何實際使用這個類來建立一個無限計時器。相同的參考下面的程式碼。
from time import sleep
from threading import Timer
from datetime import datetime
class MyInfiniteTimer:
    """
    A Thread that executes infinitely
    """
    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 = Timer(self.t, self.handle_function)
        self.thread.start()
    def cancel(self):
        self.thread.cancel()
def print_current_datetime():
    print(datetime.today())
t = MyInfiniteTimer(1, print_current_datetime)
t.start()
sleep(5)
t.cancel()
sleep(5)
t.start()
sleep(5)
t.cancel()
輸出:
2021-10-31 05:51:20.754663
2021-10-31 05:51:21.755083
2021-10-31 05:51:22.755459
2021-10-31 05:51:23.755838
2021-10-31 05:51:24.756172
2021-10-31 05:51:30.764942
2021-10-31 05:51:31.765281
2021-10-31 05:51:32.765605
2021-10-31 05:51:33.766017
2021-10-31 05:51:34.766357
正如我們所見,MyInfiniteTimer 類使用了 Timer 類。它接受兩個引數:t 和 hFunction,它們指的是秒數和 Timer 物件的回撥函式。建立 MyInfiniteTimer 類物件時,該類的建構函式會建立一個新的計時器物件,但不會啟動它。可以使用 MyInfiniteTimer 類的 start() 方法啟動計時器。並使用 stop() 方法,可以停止計時器。當前計時器結束後,處理程式或 handle_function() 會建立一個與前一個計時器具有相同配置的新計時器並啟動它。
為了展示 MyInfiniteTimer 類的工作,我們首先在 29 行建立了一個新的 MyInfiniteTimer 類物件,然後呼叫了 start() 方法。接下來,我們等待 5 秒或讓計時器執行 5 秒。然後我們停止計時器並再次等待 5 秒。最後,我們重複最後兩個過程,然後程式終止。
