一.線程定時器Timer原理
原理比較簡單,指定時間間隔后啟動線程,適用場景:完成定時任務,例如:定時提醒-鬧鍾等等.
# 導入線程模塊 import threading timer = threading.Timer(interval, function, args=None, kwargs=None)
參數介紹:
interval — 定時器間隔,間隔多少秒之后啟動定時器任務(單位:秒);
function — 線程函數;
args — 線程參數,可以傳遞元組類型數據,默認為空(缺省參數);
kwargs — 線程參數,可以傳遞字典類型數據,默認為空(缺省參數);
二、測試代碼
from datetime import datetime from threading import Timer import time ''' 每個 10 秒打印當前時間。 ''' def timedTask(): ''' 第一個參數: 延遲多長時間執行任務(單位: 秒) 第二個參數: 要執行的任務, 即函數 第三個參數: 調用函數的參數(tuple) ''' Timer(10, task, ()).start() # 定時任務 def task(): print(datetime.now().strftime("%Y-%m-%d %H:%M:%S")) if __name__ == '__main__': timedTask() while True: print(time.time()) time.sleep(5)
運行結果:
1512486945.1196375 1512486950.119873 2017-12-05 23:15:50 1512486955.133385
三、Timer定時器每3秒執行任務
from threading import Timer import psutil import datetime def MonitorSystem(logfile = None): cpuper = psutil.cpu_percent() mem = psutil.virtual_memory() memper = mem.percent now = datetime.datetime.now() ts = now.strftime('%Y-%m-%d %H:%M:%S') line = f'{ts} cpu:{cpuper}%, mem:{memper}%' print(line) if logfile: logfile.write(line) #啟動定時器任務,每三秒執行一次 Timer(3, MonitorSystem).start() MonitorSystem()
更多定時任務的實現方式:
https://blog.51cto.com/huangyg/2367088