主頁 > 知識(shí)庫 > python 實(shí)現(xiàn)定時(shí)任務(wù)的四種方式

python 實(shí)現(xiàn)定時(shí)任務(wù)的四種方式

熱門標(biāo)簽:平頂山外呼系統(tǒng)免費(fèi) 在哪里辦理400電話號(hào)碼 400電話申請(qǐng)服務(wù)商選什么 西藏智能外呼系統(tǒng)五星服務(wù) 原裝電話機(jī)器人 工廠智能電話機(jī)器人 千陽自動(dòng)外呼系統(tǒng) 清遠(yuǎn)360地圖標(biāo)注方法 江蘇客服外呼系統(tǒng)廠家

用Python實(shí)現(xiàn)定時(shí)任務(wù)

有些時(shí)候我們需要每隔一段時(shí)間就要執(zhí)行一段程序,或者是往復(fù)循環(huán)執(zhí)行某一個(gè)任務(wù)。比如博主在上篇文章講的爬蟲一樣,在實(shí)現(xiàn)對(duì)某個(gè)目標(biāo)進(jìn)行在線爬取的話,也需要用到實(shí)時(shí)任務(wù)。

用Python實(shí)現(xiàn)定時(shí)任務(wù)的四種方法

  • while True: + sleep()
  • threading.Timer定時(shí)器
  • 調(diào)度模塊schedule
  • 任務(wù)框架APScheduler

定時(shí)要完成的Task(簡(jiǎn)單定義下)

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)定時(shí)任務(wù)

第一個(gè)想到的肯定就行while:true + sleep組合了吧,簡(jiǎn)單粗暴,實(shí)現(xiàn)如下

def loopMonitor():
  while True:
    Task()
    # 3s檢查一次
    time.sleep(3)

這種方法的缺點(diǎn)是只能實(shí)現(xiàn)同步任務(wù),無法執(zhí)行異步任務(wù)

利用threading.Timer定時(shí)器實(shí)現(xiàn)定時(shí)任務(wù)

from threading import Timer
def timerMonitor():
  Task()
  t = Timer(3, timerMonitor)
  t.start()

出現(xiàn)的問題是,運(yùn)行次數(shù)過多時(shí),會(huì)出現(xiàn)報(bào)錯(cuò):Pyinstaller maximum recursion depth exceeded Error Resolution
達(dá)到最大遞歸深度,然后想到的是修改最大遞歸深度

sys.setrecursionlimit(100000000)

但是運(yùn)行到達(dá)到最大CPU時(shí),python會(huì)直接銷毀程序,涼涼0.0

利用調(diào)度模塊schedule實(shí)現(xiàn)定時(shí)任務(wù)

schedule是一個(gè)第三方輕量級(jí)的任務(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也比其他幾種多的多。

利用任務(wù)框架APScheduler實(shí)現(xiàn)定時(shí)任務(wù)

APScheduler是Python的一個(gè)定時(shí)任務(wù)框架,用于執(zhí)行周期或者定時(shí)任務(wù),該框架不僅可以添加、刪除定時(shí)任務(wù),還可以將任務(wù)存儲(chǔ)到數(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()

總結(jié)

1:循環(huán)+sleep方式可以用來做簡(jiǎn)單測(cè)試。
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ù),無可挑剔。
所以,用誰不用我說了吧QAQ

以上就是python 實(shí)現(xiàn)定時(shí)任務(wù)的四種方式的詳細(xì)內(nèi)容,更多關(guān)于python 實(shí)現(xiàn)定時(shí)任務(wù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 自動(dòng)在Windows中運(yùn)行Python腳本并定時(shí)觸發(fā)功能實(shí)現(xiàn)
  • 實(shí)現(xiàn)Windows下設(shè)置定時(shí)任務(wù)來運(yùn)行python腳本
  • 如何給windows設(shè)置定時(shí)任務(wù)并運(yùn)行python腳本
  • python獲取指定時(shí)間段內(nèi)特定規(guī)律的日期列表
  • python中用Scrapy實(shí)現(xiàn)定時(shí)爬蟲的實(shí)例講解
  • Python爬蟲定時(shí)計(jì)劃任務(wù)的幾種常見方法(推薦)
  • python實(shí)現(xiàn)定時(shí)發(fā)送郵件到指定郵箱
  • python實(shí)現(xiàn)定時(shí)發(fā)送郵件
  • python腳本定時(shí)發(fā)送郵件
  • Python實(shí)現(xiàn)FTP文件定時(shí)自動(dòng)下載的步驟
  • python爬蟲調(diào)度器用法及實(shí)例代碼
  • scrapy處理python爬蟲調(diào)度詳解
  • 簡(jiǎn)單的Python調(diào)度器Schedule詳解
  • python編寫網(wǎng)頁爬蟲腳本并實(shí)現(xiàn)APScheduler調(diào)度
  • Python使用定時(shí)調(diào)度任務(wù)的方式

標(biāo)簽:天水 錦州 西安 股票 隨州 日照 白城 安慶

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python 實(shí)現(xiàn)定時(shí)任務(wù)的四種方式》,本文關(guān)鍵詞  python,實(shí)現(xiàn),定時(shí),任務(wù),的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python 實(shí)現(xiàn)定時(shí)任務(wù)的四種方式》相關(guān)的同類信息!
  • 本頁收集關(guān)于python 實(shí)現(xiàn)定時(shí)任務(wù)的四種方式的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章