溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python定時(shí)執(zhí)行程序問題怎么解決

發(fā)布時(shí)間:2023-05-05 14:58:54 來源:億速云 閱讀:110 作者:iii 欄目:開發(fā)技術(shù)

這篇“Python定時(shí)執(zhí)行程序問題怎么解決”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Python定時(shí)執(zhí)行程序問題怎么解決”文章吧。

    Python定時(shí)執(zhí)行程序(schedule)

    使用schedule庫

    import schedule
    import time
    def job():
        print("I'm working...")
    schedule.every(10).seconds.do(job) # 每10秒執(zhí)行一次
    schedule.every().wednesday.at("13:15").do(job) # 每周三13點(diǎn)15執(zhí)行
    schedule.every(10).minutes.do(job) # 每10分鐘執(zhí)行一次
    schedule.every().hour.do(job) # 每小時(shí)執(zhí)行一次
    schedule.every().day.at("10:30").do(job) # 每天十點(diǎn)半執(zhí)行
    schedule.every(5).to(10).minutes.do(job) # 每5-10分鐘隨機(jī)執(zhí)行一次
    schedule.every().monday.do(job) # 每周一執(zhí)行
    schedule.every().minute.at(":17").do(job) # 每分鐘的17秒執(zhí)行一次
    while True:
        schedule.run_pending() # 運(yùn)行所有可運(yùn)行的任務(wù)

    如果是要定在4:30執(zhí)行,一定要寫schedule.every().day.at("04:30").do(job)

    而不能只寫schedule.every().day.at("4:30").do(job)

    注意,如果程序執(zhí)行的時(shí)間要比你設(shè)定的時(shí)間間隔短,就是下一次定時(shí)程序開始執(zhí)行的時(shí)候你上一次程序還沒有執(zhí)行完的話,就會(huì)新開進(jìn)程。

    進(jìn)程堆疊多了就會(huì)成災(zāi)難

    python定時(shí)執(zhí)行任務(wù)(schedule)時(shí)間延遲踩坑實(shí)錄

    通過schedule設(shè)置定時(shí)執(zhí)行某個(gè)任務(wù)

    import schedule
    import time
    # 定義某個(gè)任務(wù)
    def job():
        ...
    # 設(shè)置執(zhí)行時(shí)間
    schedule.every().seconds.do(job) # 每秒執(zhí)行一次任務(wù)
    schedule.every().minutes.do(job) # 每分鐘執(zhí)行一次任務(wù)
    schedule.every().hour.do(job) # 每小時(shí)執(zhí)行一次任務(wù)
    # 可以指定具體時(shí)間間隔
    schedule.every(10).minutes.do(job) # 每10分鐘執(zhí)行一次任務(wù)
    # 設(shè)置每天某一時(shí)刻執(zhí)行
    schedule.every().day.at("05:15").do(job) # 每天凌晨5點(diǎn)15分執(zhí)行任務(wù)
    # 設(shè)置星期幾執(zhí)行
    schedule.every().monday.at("05:15").do(job) # 每周一凌晨5點(diǎn)15分執(zhí)行任務(wù)
    while True:
        schedule.run_pending() # 運(yùn)行所有可運(yùn)行的任務(wù)

    踩坑問題

    第一個(gè)注意的點(diǎn)是,你要先在手動(dòng)運(yùn)行程序來開啟服務(wù)(此時(shí)程序會(huì)暫停),然后才會(huì)在指定時(shí)間繼續(xù)執(zhí)行。

    第二個(gè)注意的點(diǎn)是,在使用時(shí),因?yàn)?strong>程序運(yùn)行時(shí)間的存在,會(huì)出現(xiàn)時(shí)間延遲問題。比如通過代碼設(shè)置每10分鐘跑一次,

    schedule.every(10).minutes.do(job) # 每10分鐘執(zhí)行一次任務(wù)

    結(jié)果出現(xiàn)

    Python定時(shí)執(zhí)行程序問題怎么解決

    但是即下一次執(zhí)行時(shí)間是從上一次程序運(yùn)行結(jié)束時(shí)間+10min來的,而我希望的應(yīng)該是從上一次程序開始運(yùn)行+10min,即正確的應(yīng)該是10:20:21,這樣下去會(huì)導(dǎo)致時(shí)間延遲越來越大。

    解決方法

    只需要加上一個(gè)具體時(shí)刻(這里設(shè)置的是15s):

    schedule.every(10).minutes.at(":15").do(job) # 每10分鐘過15s執(zhí)行程序

    也就是說,在10:00:21開啟服務(wù),

    第一次執(zhí)行 10:10:15,
    第二次執(zhí)行 10:20:15,
    第三次執(zhí)行 10:30:15,
    …

    這樣就解決了程序運(yùn)行時(shí)間導(dǎo)致的時(shí)間延遲問題。

    注意!??! 首次開啟服務(wù),一定要在當(dāng)前時(shí)間的15秒之后運(yùn)行程序,才是正常的。

    比如在10:00:08開啟服務(wù),下一次會(huì)在10:09:15分執(zhí)行(異常)

    比如在10:00:21開啟服務(wù),下一次會(huì)在10:10:15分執(zhí)行(正常)

    以上就是關(guān)于“Python定時(shí)執(zhí)行程序問題怎么解決”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI