python 實(shí)現(xiàn)定時任務(wù)的四種方式
用Python實(shí)現(xiàn)定時任務(wù)
有些時候我們需要每隔一段時間就要執(zhí)行一段程序,或者是往復(fù)循環(huán)執(zhí)行某一個任務(wù)。比如博主在上篇文章講的爬蟲一樣,在實(shí)現(xiàn)對某個目標(biāo)進(jìn)行在線爬取的話,也需要用到實(shí)時任務(wù)。
用Python實(shí)現(xiàn)定時任務(wù)的四種方法
- while True: + sleep()
- threading.Timer定時器
- 調(diào)度模塊schedule
- 任務(wù)框架APScheduler
定時要完成的Task(簡單定義下)
import datetime
def Task():
now = datetime.datetime.now()
ts = now.strftime('%Y-%m-%d %H:%M:%S')
print(ts)
利用while True: + sleep()實(shí)現(xiàn)定時任務(wù)
第一個想到的肯定就行while:true + sleep組合了吧,簡單粗暴,實(shí)現(xiàn)如下
def loopMonitor():
while True:
Task()
# 3s檢查一次
time.sleep(3)
這種方法的缺點(diǎn)是只能實(shí)現(xiàn)同步任務(wù),無法執(zhí)行異步任務(wù)
利用threading.Timer定時器實(shí)現(xiàn)定時任務(wù)
from threading import Timer def timerMonitor(): Task() t = Timer(3, timerMonitor) t.start()
出現(xiàn)的問題是,運(yùn)行次數(shù)過多時,會出現(xiàn)報錯:Pyinstaller maximum recursion depth exceeded Error Resolution
達(dá)到最大遞歸深度,然后想到的是修改最大遞歸深度
sys.setrecursionlimit(100000000)
但是運(yùn)行到達(dá)到最大CPU時,python會直接銷毀程序,涼涼0.0
利用調(diào)度模塊schedule實(shí)現(xiàn)定時任務(wù)
schedule是一個第三方輕量級的任務(wù)調(diào)度模塊,可以按照秒,分,小時,日期或者自定義事件執(zhí)行時間
如果想執(zhí)行多個任務(wù),也可以添加多個task
代碼見下
import schedule
def scheduleMonitor():
# 清空任務(wù)
schedule.clear()
# 創(chuàng)建一個按3秒間隔執(zhí)行任務(wù)
schedule.every(3).seconds.do(Task)
# 創(chuàng)建一個按2秒間隔執(zhí)行任務(wù)
schedule.every(2).seconds.do(Task)
while True:
schedule.run_pending()
但是他依然需要和while Ture配合使用,而且占用的CPU也比其他幾種多的多。
利用任務(wù)框架APScheduler實(shí)現(xiàn)定時任務(wù)
APScheduler是Python的一個定時任務(wù)框架,用于執(zhí)行周期或者定時任務(wù),該框架不僅可以添加、刪除定時任務(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ù),時間間隔5S scheduler.add_job(Task, 'interval', seconds=5, id='test_job2') scheduler.start()
總結(jié)
1:循環(huán)+sleep方式可以用來做簡單測試。
2:timer可以實(shí)現(xiàn)異步定時任務(wù)。
3:schedule可以定點(diǎn)定時執(zhí)行,但是仍然需要while Ture配合,而且占用內(nèi)存大。
4:APScheduler框架更加強(qiáng)大,可以直接在里面添加定點(diǎn)與定時任務(wù),無可挑剔。
所以,用誰不用我說了吧QAQ
以上就是python 實(shí)現(xiàn)定時任務(wù)的四種方式的詳細(xì)內(nèi)容,更多關(guān)于python 實(shí)現(xiàn)定時任務(wù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python中關(guān)于時間和日期函數(shù)的常用計算總結(jié)(time和datatime)
python中關(guān)于時間和日期函數(shù)有time和datatime使用介紹,需要的朋友可以參考下2013-03-03
使用django-guardian實(shí)現(xiàn)django-admin的行級權(quán)限控制的方法
這篇文章主要介紹了使用django-guardian實(shí)現(xiàn)django-admin的行級權(quán)限控制的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10
對python中的for循環(huán)和range內(nèi)置函數(shù)詳解
下面小編就為大家分享一篇對python中的for循環(huán)和range內(nèi)置函數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
用python登錄帶弱圖片驗(yàn)證碼的網(wǎng)站
這篇文章主要介紹了用python登錄帶弱圖片驗(yàn)證碼的網(wǎng)站方法,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-03-03
python?隨機(jī)生成emoji表情的方法實(shí)現(xiàn)
本文主要介紹了python?隨機(jī)生成emoji表情的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09
python向已存在的excel中新增表,不覆蓋原數(shù)據(jù)的實(shí)例
下面小編就為大家分享一篇python向已存在的excel中新增表,不覆蓋原數(shù)據(jù)的實(shí)例,具有很好超參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05

