您好,登錄后才能下訂單哦!
這篇文章主要介紹python怎么實(shí)現(xiàn)定時(shí)任務(wù),文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
有些時(shí)候我們需要每隔一段時(shí)間就要執(zhí)行一段程序,或者是往復(fù)循環(huán)執(zhí)行某一個(gè)任務(wù)。比如博主在上篇文章講的爬蟲一樣,在實(shí)現(xiàn)對某個(gè)目標(biāo)進(jìn)行在線爬取的話,也需要用到實(shí)時(shí)任務(wù)。
while True: + sleep()
threading.Timer定時(shí)器
調(diào)度模塊schedule
任務(wù)框架APScheduler
定時(shí)要完成的Task(簡單定義下)
import datetime def Task(): now = datetime.datetime.now() ts = now.strftime('%Y-%m-%d %H:%M:%S') print(ts)
第一個(gè)想到的肯定就行while:true + sleep組合了吧,簡單粗暴,實(shí)現(xiàn)如下
def loopMonitor(): while True: Task() # 3s檢查一次 time.sleep(3)
這種方法的缺點(diǎn)是只能實(shí)現(xiàn)同步任務(wù),無法執(zhí)行異步任務(wù)
from threading import Timer def timerMonitor(): Task() t = Timer(3, timerMonitor) t.start()
出現(xiàn)的問題是,運(yùn)行次數(shù)過多時(shí),會出現(xiàn)報(bào)錯(cuò):Pyinstaller maximum recursion depth exceeded Error Resolution
達(dá)到最大遞歸深度,然后想到的是修改最大遞歸深度
sys.setrecursionlimit(100000000)
但是運(yùn)行到達(dá)到最大CPU時(shí),python會直接銷毀程序,涼涼0.0
schedule是一個(gè)第三方輕量級的任務(wù)調(diào)度模塊,可以按照秒,分,小時(shí),日期或者自定義事件執(zhí)行時(shí)間
如果想執(zhí)行多個(gè)任務(wù),也可以添加多個(gè)task
代碼見下
import schedule def scheduleMonitor(): # 清空任務(wù) schedule.clear() # 創(chuàng)建一個(gè)按3秒間隔執(zhí)行任務(wù) schedule.every(3).seconds.do(Task) # 創(chuàng)建一個(gè)按2秒間隔執(zhí)行任務(wù) schedule.every(2).seconds.do(Task) while True: schedule.run_pending()
但是他依然需要和while Ture配合使用,而且占用的CPU也比其他幾種多的多。
APScheduler是Python的一個(gè)定時(shí)任務(wù)框架,用于執(zhí)行周期或者定時(shí)任務(wù),該框架不僅可以添加、刪除定時(shí)任務(wù),還可以將任務(wù)存儲到數(shù)據(jù)庫中,實(shí)現(xiàn)任務(wù)的持久化,使用起來非常方便。
from apscheduler.schedulers.blocking import BlockingScheduler def APschedulerMonitor(): # 創(chuàng)建調(diào)度器:BlockingScheduler scheduler = BlockingScheduler() scheduler.add_job(Task, 'interval', seconds=3, id='test_job1') # 添加任務(wù),時(shí)間間隔5S scheduler.add_job(Task, 'interval', seconds=5, id='test_job2') scheduler.start()
1:循環(huán)+sleep方式可以用來做簡單測試。
2:timer可以實(shí)現(xiàn)異步定時(shí)任務(wù)。
3:schedule可以定點(diǎn)定時(shí)執(zhí)行,但是仍然需要while Ture配合,而且占用內(nèi)存大。
4:APScheduler框架更加強(qiáng)大,可以直接在里面添加定點(diǎn)與定時(shí)任務(wù),無可挑剔。
以上是“python怎么實(shí)現(xiàn)定時(shí)任務(wù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。