在實(shí)際應(yīng)用中,我們經(jīng)常需要使用定時(shí)器去觸發(fā)一些事件。Python中通過線程實(shí)現(xiàn)定時(shí)器timer,其使用非常簡單??词纠?/p>
十多年的慈溪網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營銷型網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整慈溪建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“慈溪網(wǎng)站設(shè)計(jì)”,“慈溪網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
一秒后輸出 Hello Timer!
oneshot的定時(shí)器這樣就可以實(shí)現(xiàn)。
如果要實(shí)現(xiàn)cycle的定時(shí)器,則可以:
1s后定時(shí)器啟動(dòng)后,將再次以5.5s為間隔周期性執(zhí)行回調(diào)fun_timer函數(shù)
結(jié)果是:
在使用Python定時(shí)器時(shí)需要注意:
1.定時(shí)器構(gòu)造函數(shù)主要有2個(gè)參數(shù),第一個(gè)參數(shù)為時(shí)間,第二個(gè)參數(shù)為函數(shù)名,第一個(gè)參數(shù)表示多長時(shí)間后調(diào)用后面第二個(gè)參數(shù)指明的函數(shù)。第二個(gè)參數(shù)注意是函數(shù)對(duì)象,進(jìn)行參數(shù)傳遞,用函數(shù)名(如fun_timer)表示該對(duì)象,不能寫成函數(shù)執(zhí)行語句fun_timer(),不然會(huì)報(bào)錯(cuò)。
2.定時(shí)器間隔單位是秒,可以是浮點(diǎn)數(shù),如5.5,0.02等,在執(zhí)行函數(shù)fun_timer內(nèi)部和外部中給的值可以不同。如上例中第一次執(zhí)行fun_timer是1秒后,后面的都是5.5秒后執(zhí)行。
3.可以使用cancel停止定時(shí)器的工作
如何定時(shí)執(zhí)行
a.我們先獲取當(dāng)前的時(shí)間
now=datetime.datetime.now()
假設(shè)當(dāng)前時(shí)間是2017-02-09 20:19:47.555000
b.然后我們輸入一個(gè)你要定時(shí)執(zhí)行的target時(shí)間
比如你是x分10秒的時(shí)候執(zhí)行sched_Timer=datetime.datetime(x,x,x,x,x,10)
前面的x是并不重要(只要最后是10秒就行了),我們就把目標(biāo)時(shí)間設(shè)的比當(dāng)前晚一點(diǎn)即可:
sched_Timer=datetime.datetime(2017,2,9,20,20,10)
c.好當(dāng)時(shí)間到了20:20:10的時(shí)候要運(yùn)行我們的程序
如何定時(shí)到了呢,很簡單用
if now==sched_Timer:
'run Task'
d.那么如何讓時(shí)間在下一分鐘10秒繼續(xù)執(zhí)行呢,也很簡單用timedelta()
datetime.timedelta(minutes=1)把target時(shí)間往后增加一分鐘
sched_Timer=sched_Timer+datetime.timedelta(minutes=1)
然后外邊用個(gè)while 死循環(huán)hold住就可以了
python查看timer定時(shí)任務(wù)已開啟 的操作方法:Timer定時(shí)任務(wù)
下面是Timer函數(shù)的官方doc介紹信息
"""
Call a function after a specified number of seconds:
t = Timer(30.0, f, args=None, kwargs=None)
t.start()
t.cancel() # stop the timer's action if it's still waiting
"""
第一個(gè)參數(shù)時(shí)指定多長時(shí)間之后執(zhí)行這個(gè)函數(shù),第二個(gè)參數(shù)時(shí)調(diào)用的函數(shù)名,
后面兩個(gè)是可選函數(shù),作為傳遞函數(shù)需要使用的參數(shù),可以傳遞普通的參數(shù)和字典
t.start() 啟動(dòng)這個(gè)定時(shí)任務(wù),也可以使用t.cancel()在一定的條件來停止這個(gè)定時(shí)任務(wù),
下面這行代碼表示十秒鐘后調(diào)用一次views_count這個(gè)函數(shù)
Timer(10, views_count).start()
sleep就可以吧,把程序作為一個(gè)線程,啟動(dòng)線程,里面加個(gè)sleep,示例如下:\x0d\x0aimport threading\x0d\x0aimport time\x0d\x0aclass Test(threading.Thread):\x0d\x0a def __init__(self):\x0d\x0a pass\x0d\x0a \x0d\x0a def test(self):\x0d\x0a print 'run test!'\x0d\x0a \x0d\x0a def run(self):\x0d\x0a while True:\x0d\x0a print time.strftime('%Y-%m-%d %H:%M:%S')\x0d\x0a self.test()\x0d\x0a time.sleep(5)\x0d\x0a#test...\x0d\x0aa=Test()\x0d\x0aa.run()\x0d\x0a#...test