Python的定时器
生活随笔
收集整理的這篇文章主要介紹了
Python的定时器
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
? ? ???在實際應(yīng)用中,我們經(jīng)常需要使用定時器去觸發(fā)一些事件。Python中通過線程實現(xiàn)定時器timer,其使用非常簡單。看示例:import threading
def fun_timer():
print('Hello Timer!')
timer = threading.Timer(1, fun_timer)
timer.start()輸出結(jié)果:Hello?Timer!Process?finished?with?exit?code?0注意,只輸出了一次,程序就結(jié)束了,顯然不是我們想要的結(jié)果。看Timer類中的解釋性描述:"""Call a function after a specified number of seconds"""一段時間后調(diào)用一個函數(shù),但并沒有說要循環(huán)調(diào)用該函數(shù)。因此,修改如下:def fun_timer():
print('Hello Timer!')
global timer
timer = threading.Timer(5.5, fun_timer)
timer.start()
timer = threading.Timer(1, fun_timer)
timer.start()輸出結(jié)果:Hello?Timer!Hello?Timer!Hello?Timer!Hello?Timer!............定時器工作正常。
在使用Python定時器時需要注意如下4個方面:(1)定時器構(gòu)造函數(shù)主要有2個參數(shù),第一個參數(shù)為時間,第二個參數(shù)為函數(shù)名,第一個參數(shù)表示多長時間后調(diào)用后面第二個參數(shù)指明的函數(shù)。第二個參數(shù)注意是函數(shù)對象,進行參數(shù)傳遞,用函數(shù)名(如fun_timer)表示該對象,不能寫成函數(shù)執(zhí)行語句fun_timer(),不然會報錯。用type查看下,可以看出兩者的區(qū)別。print(type(fun_timer()))
print(type(fun_timer))輸出結(jié)果:Hello?Timer!<class?'NoneType'><class?'function'>(2)必須在定時器執(zhí)行函數(shù)內(nèi)部重復(fù)構(gòu)造定時器,因為定時器構(gòu)造后只執(zhí)行1次,必須循環(huán)調(diào)用。(3)定時器間隔單位是秒,可以是浮點數(shù),如5.5,0.02等,在執(zhí)行函數(shù)fun_timer內(nèi)部和外部中給的值可以不同。如上例中第一次執(zhí)行fun_timer是1秒后,后面的都是5.5秒后執(zhí)行。(4)可以使用cancel停止定時器的工作,如下例:# -*- coding: utf-8 -*-import threadingimport time
def fun_timer():
print('Hello Timer!')
global timer
timer = threading.Timer(5.5, fun_timer)
timer.start()
timer = threading.Timer(1, fun_timer)
timer.start()
time.sleep(15) # 15秒后停止定時器
timer.cancel()輸出結(jié)果:Hello?Timer!Hello?Timer!Hello?Timer!Process?finished?with?exit?code?0
def fun_timer():
print('Hello Timer!')
timer = threading.Timer(1, fun_timer)
timer.start()輸出結(jié)果:Hello?Timer!Process?finished?with?exit?code?0注意,只輸出了一次,程序就結(jié)束了,顯然不是我們想要的結(jié)果。看Timer類中的解釋性描述:"""Call a function after a specified number of seconds"""一段時間后調(diào)用一個函數(shù),但并沒有說要循環(huán)調(diào)用該函數(shù)。因此,修改如下:def fun_timer():
print('Hello Timer!')
global timer
timer = threading.Timer(5.5, fun_timer)
timer.start()
timer = threading.Timer(1, fun_timer)
timer.start()輸出結(jié)果:Hello?Timer!Hello?Timer!Hello?Timer!Hello?Timer!............定時器工作正常。
在使用Python定時器時需要注意如下4個方面:(1)定時器構(gòu)造函數(shù)主要有2個參數(shù),第一個參數(shù)為時間,第二個參數(shù)為函數(shù)名,第一個參數(shù)表示多長時間后調(diào)用后面第二個參數(shù)指明的函數(shù)。第二個參數(shù)注意是函數(shù)對象,進行參數(shù)傳遞,用函數(shù)名(如fun_timer)表示該對象,不能寫成函數(shù)執(zhí)行語句fun_timer(),不然會報錯。用type查看下,可以看出兩者的區(qū)別。print(type(fun_timer()))
print(type(fun_timer))輸出結(jié)果:Hello?Timer!<class?'NoneType'><class?'function'>(2)必須在定時器執(zhí)行函數(shù)內(nèi)部重復(fù)構(gòu)造定時器,因為定時器構(gòu)造后只執(zhí)行1次,必須循環(huán)調(diào)用。(3)定時器間隔單位是秒,可以是浮點數(shù),如5.5,0.02等,在執(zhí)行函數(shù)fun_timer內(nèi)部和外部中給的值可以不同。如上例中第一次執(zhí)行fun_timer是1秒后,后面的都是5.5秒后執(zhí)行。(4)可以使用cancel停止定時器的工作,如下例:# -*- coding: utf-8 -*-import threadingimport time
def fun_timer():
print('Hello Timer!')
global timer
timer = threading.Timer(5.5, fun_timer)
timer.start()
timer = threading.Timer(1, fun_timer)
timer.start()
time.sleep(15) # 15秒后停止定時器
timer.cancel()輸出結(jié)果:Hello?Timer!Hello?Timer!Hello?Timer!Process?finished?with?exit?code?0
總結(jié)
以上是生活随笔為你收集整理的Python的定时器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你应该知道的print
- 下一篇: Python的操作符重载