Python不要再使用while死循環(huán),定時(shí)器代替效果更佳
在python開(kāi)發(fā)的過(guò)程中,經(jīng)常見(jiàn)到小伙伴直接使用while True的死循環(huán)+sleep的方式來(lái)保存程序的一直運(yùn)行。
這種方式雖然能達(dá)到效果,但是說(shuō)不定什么時(shí)候就直接崩潰了。并且,在Linux環(huán)境中在檢測(cè)到while True的未知進(jìn)程就會(huì)直接干掉。
面對(duì)這樣的業(yè)務(wù)場(chǎng)景,通??梢赃x擇使用定時(shí)器的方式來(lái)完成,況且用法也比較簡(jiǎn)單。
在python中的定時(shí)任務(wù)用法通常有sched模塊/threading.QTimer模塊,sched模塊在之前的歷史文章中有過(guò)詳細(xì)說(shuō)明。
今天介紹的這個(gè)定時(shí)模塊是某位大佬寫的APScheduler定時(shí)器框架,強(qiáng)烈推薦使用這種方式來(lái)完成定時(shí)任務(wù)的開(kāi)發(fā)。
這里我們開(kāi)發(fā)一個(gè)print_datetime函數(shù)來(lái)打印當(dāng)前的時(shí)間,同時(shí)也將print_time函數(shù)作為我們需要一直保持執(zhí)行的任務(wù)。
#?Importing?the?datetime?module. import?datetime def?print_time(message=None): ????""" ????It?prints?the?current?time,?optionally?preceded?by?a?message. ????:param?message:?The?message?to?print ????""" ????print(message,?datetime.datetime.now().strftime('%Y-%m-%d?%H:%M:%S'))
然后,我們準(zhǔn)備需要使用的定時(shí)任務(wù)模塊apscheduler,可以選擇pip的方式進(jìn)行安裝,我個(gè)人一直使用的是這樣方式。
pip?install?apscheduler #?Importing?the?BlockingScheduler?class?from?the?apscheduler.schedulers.blocking?module. from?apscheduler.schedulers.blocking?import?BlockingScheduler
至此,我們便可以將需要保持一直處于執(zhí)行狀態(tài)的業(yè)務(wù)函數(shù),也就是這里的print_datetime函數(shù)作為定時(shí)中的任務(wù)執(zhí)行。
如此,我們就不用使用while True死循環(huán)+sleep的方式來(lái)使任務(wù)一直保存在運(yùn)行形狀了。
#?Creating?a?scheduler?object. scheduler?=?BlockingScheduler() #?Adding?a?job?to?the?scheduler. scheduler.add_job(func=print_time,?args=('時(shí)間打印定時(shí)任務(wù)',),?trigger='cron',?second='*/1')??#?每秒執(zhí)行 #?Starting?the?scheduler?in?a?separate?thread. scheduler.start()
最后,直接啟動(dòng)當(dāng)前的.py文件就能直接執(zhí)行定時(shí)任務(wù)了,運(yùn)行效果如下。
時(shí)間打印定時(shí)任務(wù) 2023-02-26 13:52:52
時(shí)間打印定時(shí)任務(wù) 2023-02-26 13:52:53
時(shí)間打印定時(shí)任務(wù) 2023-02-26 13:52:54
時(shí)間打印定時(shí)任務(wù) 2023-02-26 13:52:55
時(shí)間打印定時(shí)任務(wù) 2023-02-26 13:52:56
時(shí)間打印定時(shí)任務(wù) 2023-02-26 13:52:57
當(dāng)然,作為定時(shí)任務(wù)的框架apscheduler,他還有很多的技能。比如:按更復(fù)雜的周期執(zhí)行,在有限的時(shí)間內(nèi)執(zhí)行,單點(diǎn)執(zhí)行等等。
下面是我列出的比較常見(jiàn)的apscheduler定時(shí)任務(wù)的執(zhí)行方式,供小伙伴們參考,提出寶貴意見(jiàn)。
scheduler.add_job(func=print_time,?args=('任務(wù)只執(zhí)行一次,在下一次的時(shí)間執(zhí)行',), ??????????????????next_run_time=datetime.datetime.now()?+?datetime.timedelta(seconds=60)) scheduler.add_job(func=print_time,?args=('時(shí)間打印定時(shí)任務(wù)',),?trigger='interval',?seconds=5)??#?每5秒執(zhí)行一次 scheduler.add_job(func=print_time,?args=('時(shí)間打印定時(shí)任務(wù)',),?trigger='interval',?minutes=2)??#?每2分鐘執(zhí)行一次 scheduler.add_job(func=print_time,?args=('時(shí)間打印定時(shí)任務(wù)',),?trigger='interval',?hours=1)??#?每1小時(shí)執(zhí)行一次 scheduler.add_job(func=print_time,?args=('時(shí)間打印定時(shí)任務(wù)',),?trigger='cron',?minute='*',?second='1')??#?每分鐘執(zhí)行一次 scheduler.add_job(func=print_time,?args=('時(shí)間打印定時(shí)任務(wù)',),?trigger='cron',?hour='*',?minute='0', ??????????????????second='0')??#?每小時(shí)執(zhí)行一次 scheduler.add_job(func=print_time,?args=('時(shí)間打印定時(shí)任務(wù)',),?trigger='cron',?hour='20',?minute='0', ??????????????????second='0')??#?每天20:00執(zhí)行一次 scheduler.add_job(func=print_time,?args=('時(shí)間打印定時(shí)任務(wù)',),?trigger='cron',?hour='21')??#?每天21:00執(zhí)行一次
在使用過(guò)程中,apscheduler模塊是最簡(jiǎn)單的調(diào)度類定時(shí)任務(wù),歡迎小伙伴留言討論!
到此這篇關(guān)于Python不要再使用while死循環(huán),定時(shí)器代替效果更佳的文章就介紹到這了,更多相關(guān)Python while死循環(huán)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python2.7實(shí)現(xiàn)爬蟲網(wǎng)頁(yè)數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了python2.7實(shí)現(xiàn)爬蟲網(wǎng)頁(yè)數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05深入理解Python虛擬機(jī)中復(fù)數(shù)(complex)的實(shí)現(xiàn)原理及源碼剖析
在本篇文章當(dāng)中主要給大家介紹在 cpython 虛擬機(jī)當(dāng)中是如何實(shí)現(xiàn) 復(fù)數(shù) complex 這個(gè)數(shù)據(jù)類型的,這個(gè)數(shù)據(jù)類型在 cpython 當(dāng)中一應(yīng)該是一個(gè)算比較簡(jiǎn)單的數(shù)據(jù)類型了,非常容易理解2023-03-03Python實(shí)現(xiàn)批量備份交換機(jī)配置+自動(dòng)巡檢
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)批量備份交換機(jī)配置+自動(dòng)巡檢的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11對(duì)python requests的content和text方法的區(qū)別詳解
今天小編就為大家分享一篇對(duì)python requests的content和text方法的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10淺談python 線程池threadpool之實(shí)現(xiàn)
這篇文章主要介紹了淺談python 線程池threadpool之實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11詳解安裝mitmproxy以及遇到的坑和簡(jiǎn)單用法
mitmproxy 是一款工具,也可以說(shuō)是 python 的一個(gè)包,在命令行操作的工具。這篇文章主要介紹了詳解安裝mitmproxy以及遇到的坑和簡(jiǎn)單用法,感興趣的小伙伴們可以參考一下2019-01-01Python函數(shù)中的不定長(zhǎng)參數(shù)相關(guān)知識(shí)總結(jié)
今天給大家?guī)?lái)的是關(guān)于Python函數(shù)的相關(guān)知識(shí),文章圍繞著Python不定長(zhǎng)參數(shù)展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06Anaconda+Pycharm+Pytorch虛擬環(huán)境創(chuàng)建(各種包安裝保姆級(jí)教學(xué))
相信很多時(shí)候大家都會(huì)用到虛擬環(huán)境,他具有可以讓你快速切換不同的python版本,本文主要介紹了Anaconda+Pycharm+Pytorch虛擬環(huán)境創(chuàng)建,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10