Python中schedule模塊關(guān)于定時任務(wù)使用方法
1 取消定時任務(wù)
比如當滿足一定條件時,就取消定時任務(wù),在這種場景下,不可能說把進程干掉,所以可以利用取消定時任務(wù)的功能
如下代碼,通過count控制當執(zhí)行了5此以后,就取消定時任務(wù)
import schedule import time count=0 def do_func(name,age): global count count+=1 print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func : 姓名:"+name+" 年齡:"+str(age)) def main(): job=schedule.every(2).seconds.do(do_func,"張三豐",100) while True: if count>=5: schedule.cancel_job(job) schedule.run_pending() if __name__=="__main__": main()
執(zhí)行結(jié)果如下,可以看到當執(zhí)行完5此打印后,進程并沒有退出,但是定時任務(wù)不再執(zhí)行了
2022-05-25 00:03:15 in do func : 姓名:張三豐 年齡:100
2022-05-25 00:03:17 in do func : 姓名:張三豐 年齡:100
2022-05-25 00:03:19 in do func : 姓名:張三豐 年齡:100
2022-05-25 00:03:21 in do func : 姓名:張三豐 年齡:100
2022-05-25 00:03:23 in do func : 姓名:張三豐 年齡:100
2 定時任務(wù)只執(zhí)行一次
定時任務(wù)執(zhí)行一次似乎是沒啥意義的,但是在某些場景下,比如執(zhí)行了一定次數(shù)后,當滿足一定條件時只需要再執(zhí)行一次,這個時候就派上用場了
如下為單純的只執(zhí)行一次的定時任務(wù)
import time def do_func(name,age): print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func : 姓名:"+name+" 年齡:"+str(age)) return schedule.CancelJob def main(): schedule.every(2).seconds.do(do_func,"張三豐",100) while True: schedule.run_pending() if __name__=="__main__": main()
執(zhí)行結(jié)果如下,可以發(fā)現(xiàn),執(zhí)行完一次就不再執(zhí)行了
2022-05-25 00:14:20 in do func : 姓名:張三豐 年齡:100
執(zhí)行一次的定時任務(wù)的原理其實是在任務(wù)函數(shù)結(jié)尾返回了一個取消任務(wù)的消息,這里真正的價值在于將任務(wù)是否結(jié)束的決定權(quán)交給了任務(wù)函數(shù),即可以在任務(wù)函數(shù)中進行條件判斷,當達到一定的業(yè)務(wù)邏輯條件時,可以返回取消定時任務(wù)的消息,這樣設(shè)置定時任務(wù)就更加靈活了
如下,可以在業(yè)務(wù)中判斷是否具備停下來的條件,當條件滿足了就停下來不再執(zhí)行了
import schedule import time count=1 def do_func(name,age): global count count+=1 print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func : 姓名:"+name+" 年齡:"+str(age)) if count >= 5: print("已經(jīng)執(zhí)行5次了,達到預期結(jié)果了,不需要再執(zhí)行了...") return schedule.CancelJob def main(): schedule.every(2).seconds.do(do_func,"張三豐",100) while True: schedule.run_pending() if __name__=="__main__": main()
執(zhí)行結(jié)果如下:
2022-05-25 00:19:30 in do func : 姓名:張三豐 年齡:100
2022-05-25 00:19:32 in do func : 姓名:張三豐 年齡:100
2022-05-25 00:19:34 in do func : 姓名:張三豐 年齡:100
2022-05-25 00:19:36 in do func : 姓名:張三豐 年齡:100
2022-05-25 00:19:38 in do func : 姓名:張三豐 年齡:100
已經(jīng)執(zhí)行5次了,達到預期結(jié)果了,不需要再執(zhí)行了...
3 獲取所有的定時任務(wù)
獲取所有的定時任務(wù)作用就是可以根據(jù)一定的條件,對某些滿足條件的定時任務(wù)進行各種操作如修改等
如下代碼為對間隔3的任務(wù)從每3秒修改為每3分鐘
import schedule import time def do_func(name,age): print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func : 姓名:"+name+" 年齡:"+str(age)) def main(): schedule.every(2).seconds.do(do_func,"張三豐",100) schedule.every(3).seconds.do(do_func, "張三豐", 200) all_jobs=schedule.get_jobs() print("原始定時任務(wù):") for job in all_jobs: print(job) for job in all_jobs: if job.interval ==3: job.unit="minutes" print("修改后的定時任務(wù):") for job in all_jobs: print(job) if __name__=="__main__": main()
執(zhí)行結(jié)果如下:
原始定時任務(wù):
Job(interval=2, unit=seconds, do=do_func, args=('張三豐', 100), kwargs={})
Job(interval=3, unit=seconds, do=do_func, args=('張三豐', 200), kwargs={})
修改后的定時任務(wù):
Job(interval=2, unit=seconds, do=do_func, args=('張三豐', 100), kwargs={})
Job(interval=3, unit=minutes, do=do_func, args=('張三豐', 200), kwargs={})
4 取消所有任務(wù)
如下為取消所有任務(wù)的代碼,取消之前顯示有兩個任務(wù),取消后顯示有0個定時任務(wù)
import schedule import time def do_func(name,age): print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func : 姓名:"+name+" 年齡:"+str(age)) def main(): schedule.every(2).seconds.do(do_func,"張三豐",100) schedule.every(3).seconds.do(do_func, "張三豐", 200) print(len(schedule.get_jobs())) schedule.clear() print(len(schedule.get_jobs())) if __name__=="__main__": main()
執(zhí)行結(jié)果為:
2
0
5 給定時任務(wù)打標簽,同樣通過標簽獲取或取消定時任務(wù)
如下代碼演示了給任務(wù)打標簽,根據(jù)標簽挑選任務(wù),根據(jù)標簽清除任務(wù)等操作
import schedule import time def do_func(name,age): print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func : 姓名:"+name+" 年齡:"+str(age)) def main(): # 定義定時任務(wù)時直接打標簽 schedule.every(2).seconds.do(do_func,"張三豐",100).tag("demo1","demo2") schedule.every(3).seconds.do(do_func, "張三豐", 200).tag("demo2","demo3") schedule.every(4).seconds.do(do_func, "張三豐", 300).tag("demo3", "demo4") # 根據(jù)demo2標簽選擇任務(wù) demo2=schedule.get_jobs("demo2") print("根據(jù)demo2標簽挑選出的任務(wù)") for job in demo2: print(job) # 根據(jù)標簽取消定時任務(wù) schedule.clear("demo3") all_job=schedule.get_jobs() print("刪除demo3標簽的任務(wù)后,剩余的任務(wù)") for job in all_job: print(job) if __name__=="__main__": main()
執(zhí)行結(jié)果如下:
根據(jù)demo2標簽挑選出的任務(wù)
Job(interval=2, unit=seconds, do=do_func, args=('張三豐', 100), kwargs={})
Job(interval=3, unit=seconds, do=do_func, args=('張三豐', 200), kwargs={})
刪除demo3標簽的任務(wù)后,剩余的任務(wù)
Job(interval=2, unit=seconds, do=do_func, args=('張三豐', 100), kwargs={})
到此這篇關(guān)于Python中schedule模塊關(guān)于定時任務(wù)使用方法的文章就介紹到這了,更多相關(guān)Python schedule 模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實現(xiàn)字典(dict)和字符串(string)的相互轉(zhuǎn)換方法
這篇文章主要介紹了python實現(xiàn)字典(dict)和字符串(string)的相互轉(zhuǎn)換方法,涉及Python字典dict的遍歷與字符串轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2017-03-03解決python寫入mysql中datetime類型遇到的問題
今天小編就為大家分享一篇解決python寫入mysql中datetime類型遇到的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06Python import與from import使用和區(qū)別解讀
Python程序可以調(diào)用一組基本的函數(shù)(即內(nèi)建函數(shù)),比如print()、input()和len()等函數(shù)。接下來通過本文給大家介紹Python import與from import使用及區(qū)別介紹,感興趣的朋友一起看看吧2021-09-09Python數(shù)據(jù)結(jié)構(gòu)與算法中的棧詳解(1)
這篇文章主要為大家詳細介紹了Python中的棧,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03python神經(jīng)網(wǎng)絡(luò)使用Keras構(gòu)建RNN訓練
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)使用Keras構(gòu)建RNN網(wǎng)絡(luò)訓練,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>2022-05-05在python中創(chuàng)建指定大小的多維數(shù)組方式
今天小編就為大家分享一篇在python中創(chuàng)建指定大小的多維數(shù)組方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11