a.我們先獲取當前的時間
10年積累的成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有吉木乃免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
now=datetime.datetime.now()
假設(shè)當前時間是2017-02-09 20:19:47.555000
b.然后我們輸入一個你要定時執(zhí)行的target時間
比如你是x分10秒的時候執(zhí)行sched_Timer=datetime.datetime(x,x,x,x,x,10)
前面的x是并不重要(只要最后是10秒就行了),我們就把目標時間設(shè)的比當前晚一點即可:
sched_Timer=datetime.datetime(2017,2,9,20,20,10)
c.好當時間到了20:20:10的時候要運行我們的程序
如何定時到了呢,很簡單用
if now==sched_Timer:
'run Task'
d.那么如何讓時間在下一分鐘10秒繼續(xù)執(zhí)行呢,也很簡單用timedelta()
datetime.timedelta(minutes=1)把target時間往后增加一分鐘
sched_Timer=sched_Timer+datetime.timedelta(minutes=1)
然后外邊用個while 死循環(huán)hold住就可以了
1 if __name__ == "__main__": 2 Q_w = 0 3 w = TimerMask(howtime=0.8) 4 print("-") 5 w.start() 6 #這里線程輸出這些,做其他事情的 7 while True: 8 time.sleep(0.4) #0.4秒 9 print("- ",Q_w," - WMask:",w) 10 Q_w += 1 11 pa
輸出:
于是你可能會想問,那豈不是每個不同的行為都要寫一個繼承了BaseTimer的類來做事呢,其實不然,你可以寫個函數(shù)調(diào)用的TimerFunc類:
1 class TimerFunc(BaseTimer): 2 """可傳遞任何函數(shù)的定時任務(wù)類""" 3 def __init__(self,func,howtime=1.0,enduring=True): 4 BaseTimer.__init__(self,howtime,enduring) 5 self.func = func 6 7 def exec(self): 8 self.func() #調(diào)用函數(shù) 9 10 #使用方法: 11 def doing(): 12 print("Hello") 13 14 w = TimerFunc(doing) 15 w.start()
輸出:"Hello",并且會每隔1秒執(zhí)行一次
是不是覺得可以做一堆事情了?你可以自由發(fā)揮,繼承BaseTimer類
1 w = TimerFunc(doing,5,False) #這樣就可以定義延遲5秒使用了~ 2 w.start()
用定時器做,1秒鐘喚醒一次響應(yīng)函數(shù),不要用延時函數(shù) sleep
# 定義時間顯示
self.timer = QtCore.QTimer(self)
self.timer.timeout.connect(self.act_displayTM) #綁定響應(yīng)函數(shù)
self.timer.setInterval(1000) #設(shè)置時間間隔
self.timer.start()
# 定時響應(yīng)事件對應(yīng)邏輯
def act_displayTM(self):
s_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
self.ui.label_Date.setText(s_time)
return
在實際應(yīng)用中,我們經(jīng)常需要使用定時器去觸發(fā)一些事件。Python中通過線程實現(xiàn)定時器timer,其使用非常簡單。看示例:
一秒后輸出 Hello Timer!
oneshot的定時器這樣就可以實現(xiàn)。
如果要實現(xiàn)cycle的定時器,則可以:
1s后定時器啟動后,將再次以5.5s為間隔周期性執(zhí)行回調(diào)fun_timer函數(shù)
結(jié)果是:
在使用Python定時器時需要注意:
1.定時器構(gòu)造函數(shù)主要有2個參數(shù),第一個參數(shù)為時間,第二個參數(shù)為函數(shù)名,第一個參數(shù)表示多長時間后調(diào)用后面第二個參數(shù)指明的函數(shù)。第二個參數(shù)注意是函數(shù)對象,進行參數(shù)傳遞,用函數(shù)名(如fun_timer)表示該對象,不能寫成函數(shù)執(zhí)行語句fun_timer(),不然會報錯。
2.定時器間隔單位是秒,可以是浮點數(shù),如5.5,0.02等,在執(zhí)行函數(shù)fun_timer內(nèi)部和外部中給的值可以不同。如上例中第一次執(zhí)行fun_timer是1秒后,后面的都是5.5秒后執(zhí)行。
3.可以使用cancel停止定時器的工作
1.計算生日是星期幾
當你女朋友要過生日了,你肯定要定找家飯店訂個餐慶祝一下,餐館工作日會空一些,周末位置不好定,要是能知道她的生日是星期幾就好了,下面這個程序就能搞定~~
比如girl friend 的生日假設(shè)是 gf_birthday='2017-3-3'
1).我們先把變量格式化成一個datetime對象
birthday=datetime.datetime.strptime(gf_birthday,'%Y-%m-%d')
2).然后利用datetime里面的函數(shù)weekday來得到一個下標
birthday.weekday()
3).構(gòu)造一個weekdays的列表,根據(jù)下標從列表里面取出是周幾
weekdays=['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
weekdays[birthday.weekday()]
當然你要計算比如情人節(jié),圣誕節(jié)什么的都可以用上面的程序,或者整個列表把10年的節(jié)日都羅列計算一下都是可以了,是不是很簡單,對日期的理解有木有加深了一下下
2.定時任務(wù)
在Python里面,比如你想定期去爬一個網(wǎng)頁,或者做運維的同學想每天12點去定時download一個文件,或者定時去掃描一些服務(wù)器,甚至老板的需求不停的變可能是,每隔5分鐘,或者每小時的整點10分,每周每月都有一些定時任務(wù)
用Python怎么破很簡單,下面這個程序輕松搞定
我們先從一個最簡單的例子說,假設(shè)我們是每分種的第10秒,去執(zhí)行一個任務(wù)去打印一下當前的目錄
1).window下是dir命令,linux是ls
我們用platform這個模塊來判斷一下操作系統(tǒng)
import platform
os_platfrom=platform.platform()
if os_platfrom.startswith('Darwin'):
print'this is mac os system'
os.system('ls')
elif os_platfrom.startswith('Window'):
print'this is win system'
os.system('dir')
2).如何定時執(zhí)行
a.我們先獲取當前的時間
now=datetime.datetime.now()
假設(shè)當前時間是2017-02-09 20:19:47.555000
b.然后我們輸入一個你要定時執(zhí)行的target時間
比如你是x分10秒的時候執(zhí)行sched_Timer=datetime.datetime(x,x,x,x,x,10)
前面的x是并不重要(只要最后是10秒就行了),我們就把目標時間設(shè)的比當前晚一點即可:
sched_Timer=datetime.datetime(2017,2,9,20,20,10)
c.好當時間到了20:20:10的時候要運行我們的程序
如何定時到了呢,很簡單用
if now==sched_Timer:
'run Task'
d.那么如何讓時間在下一分鐘10秒繼續(xù)執(zhí)行呢,也很簡單用timedelta()
datetime.timedelta(minutes=1)把target時間往后增加一分鐘
sched_Timer=sched_Timer+datetime.timedelta(minutes=1)
然后外邊用個while 死循環(huán)hold住就可以了
同樣的這個代碼也可以擴展,把minutes=1改成hours=1就變成了每個小時定時任務(wù),改成days=1就變成每天的定時任務(wù)
#python 2.7
import time #導入 time類
start=time.clock()
def func(a,b):
while True:
end=time.clock ()
if int(end-start)==10:
print('Warning: Timeout!!'*5)
break
a=a+b
print a
func(1,2)
主要思路:開始時間-當前時間=10則停止運行并輸出時間到了(注意縮進)
當前題目:python函數(shù)定時器的簡單介紹
轉(zhuǎn)載來源:http://muchs.cn/article2/hjddoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、服務(wù)器托管、虛擬主機、網(wǎng)站建設(shè)、網(wǎng)站設(shè)計公司、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)