python 實現(xiàn)定時任務的四種方式
有些時候我們需要每隔一段時間就要執(zhí)行一段程序,或者是往復循環(huán)執(zhí)行某一個任務。比如博主在上篇文章講的爬蟲一樣,在實現(xiàn)對某個目標進行在線爬取的話,也需要用到實時任務。
用Python實現(xiàn)定時任務的四種方法 while True: + sleep() threading.Timer定時器 調度模塊schedule 任務框架APScheduler定時要完成的Task(簡單定義下)
import datetimedef Task(): now = datetime.datetime.now() ts = now.strftime(’%Y-%m-%d %H:%M:%S’) print(ts)利用while True: + sleep()實現(xiàn)定時任務
第一個想到的肯定就行while:true + sleep組合了吧,簡單粗暴,實現(xiàn)如下
def loopMonitor(): while True: Task() # 3s檢查一次 time.sleep(3)
這種方法的缺點是只能實現(xiàn)同步任務,無法執(zhí)行異步任務
利用threading.Timer定時器實現(xiàn)定時任務from threading import Timerdef timerMonitor(): Task() t = Timer(3, timerMonitor) t.start()
出現(xiàn)的問題是,運行次數(shù)過多時,會出現(xiàn)報錯:Pyinstaller maximum recursion depth exceeded Error Resolution達到最大遞歸深度,然后想到的是修改最大遞歸深度
sys.setrecursionlimit(100000000)
但是運行到達到最大CPU時,python會直接銷毀程序,涼涼0.0
利用調度模塊schedule實現(xiàn)定時任務schedule是一個第三方輕量級的任務調度模塊,可以按照秒,分,小時,日期或者自定義事件執(zhí)行時間如果想執(zhí)行多個任務,也可以添加多個task代碼見下
import scheduledef scheduleMonitor(): # 清空任務 schedule.clear() # 創(chuàng)建一個按3秒間隔執(zhí)行任務 schedule.every(3).seconds.do(Task) # 創(chuàng)建一個按2秒間隔執(zhí)行任務 schedule.every(2).seconds.do(Task) while True: schedule.run_pending()
但是他依然需要和while Ture配合使用,而且占用的CPU也比其他幾種多的多。
利用任務框架APScheduler實現(xiàn)定時任務APScheduler是Python的一個定時任務框架,用于執(zhí)行周期或者定時任務,該框架不僅可以添加、刪除定時任務,還可以將任務存儲到數(shù)據(jù)庫中,實現(xiàn)任務的持久化,使用起來非常方便。
from apscheduler.schedulers.blocking import BlockingSchedulerdef APschedulerMonitor(): # 創(chuàng)建調度器:BlockingScheduler scheduler = BlockingScheduler() scheduler.add_job(Task, ’interval’, seconds=3, id=’test_job1’) # 添加任務,時間間隔5S scheduler.add_job(Task, ’interval’, seconds=5, id=’test_job2’) scheduler.start()總結
1:循環(huán)+sleep方式可以用來做簡單測試。2:timer可以實現(xiàn)異步定時任務。3:schedule可以定點定時執(zhí)行,但是仍然需要while Ture配合,而且占用內存大。4:APScheduler框架更加強大,可以直接在里面添加定點與定時任務,無可挑剔。所以,用誰不用我說了吧QAQ
以上就是python 實現(xiàn)定時任務的四種方式的詳細內容,更多關于python 實現(xiàn)定時任務的資料請關注好吧啦網其它相關文章!
相關文章:
1. java加載屬性配置properties文件的方法2. PHP正則表達式函數(shù)preg_replace用法實例分析3. php redis setnx分布式鎖簡單原理解析4. CSS3中Transition屬性詳解以及示例分享5. 什么是Python變量作用域6. js select支持手動輸入功能實現(xiàn)代碼7. 如何在PHP中讀寫文件8. 《Java程序員修煉之道》作者Ben Evans:保守的設計思想是Java的最大優(yōu)勢9. bootstrap select2 動態(tài)從后臺Ajax動態(tài)獲取數(shù)據(jù)的代碼10. vue使用moment如何將時間戳轉為標準日期時間格式
