Python定時(shí)執(zhí)行程序問(wèn)題(schedule)
Python定時(shí)執(zhí)行程序(schedule)
使用schedule庫(kù)
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í)行,一定要寫(xiě)schedule.every().day.at("04:30").do(job)
而不能只寫(xiě)schedule.every().day.at("4:30").do(job)
注意,如果程序執(zhí)行的時(shí)間要比你設(shè)定的時(shí)間間隔短,就是下一次定時(shí)程序開(kāi)始執(zhí)行的時(shí)候你上一次程序還沒(méi)有執(zhí)行完的話,就會(huì)新開(kāi)進(jìn)程。
進(jìn)程堆疊多了就會(huì)成災(zāi)難
python定時(shí)執(zhí)行任務(wù)(schedule)時(shí)間延遲踩坑實(shí)錄
通過(guò)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ù)
踩坑問(wèn)題
第一個(gè)注意的點(diǎn)是,你要先在手動(dòng)運(yùn)行程序來(lái)開(kāi)啟服務(wù)(此時(shí)程序會(huì)暫停),然后才會(huì)在指定時(shí)間繼續(xù)執(zhí)行。
第二個(gè)注意的點(diǎn)是,在使用時(shí),因?yàn)?strong>程序運(yùn)行時(shí)間的存在,會(huì)出現(xiàn)時(shí)間延遲問(wèn)題。比如通過(guò)代碼設(shè)置每10分鐘跑一次,
schedule.every(10).minutes.do(job) # 每10分鐘執(zhí)行一次任務(wù)
結(jié)果出現(xiàn)
但是即下一次執(zhí)行時(shí)間是從上一次程序運(yùn)行結(jié)束時(shí)間+10min來(lái)的,而我希望的應(yīng)該是從上一次程序開(kāi)始運(yùn)行+10min,即正確的應(yīng)該是10:20:21,這樣下去會(huì)導(dǎo)致時(shí)間延遲越來(lái)越大。
解決方法
只需要加上一個(gè)具體時(shí)刻(這里設(shè)置的是15s):
schedule.every(10).minutes.at(":15").do(job) # 每10分鐘過(guò)15s執(zhí)行程序
也就是說(shuō),在10:00:21開(kāi)啟服務(wù),
第一次執(zhí)行 10:10:15,
第二次執(zhí)行 10:20:15,
第三次執(zhí)行 10:30:15,
…
這樣就解決了程序運(yùn)行時(shí)間導(dǎo)致的時(shí)間延遲問(wèn)題。
注意!?。?/strong> 首次開(kāi)啟服務(wù),一定要在當(dāng)前時(shí)間的15秒之后運(yùn)行程序,才是正常的。
比如在10:00:08開(kāi)啟服務(wù),下一次會(huì)在10:09:15分執(zhí)行(異常)
比如在10:00:21開(kāi)啟服務(wù),下一次會(huì)在10:10:15分執(zhí)行(正常)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Python實(shí)現(xiàn)定時(shí)任務(wù)的九種方案總結(jié)
- Python apscheduler實(shí)現(xiàn)定時(shí)任務(wù)的方法詳解
- python中實(shí)現(xiàn)定時(shí)任務(wù)的幾種方案
- Python中實(shí)現(xiàn)定時(shí)任務(wù)詳解
- Python實(shí)現(xiàn)自動(dòng)定時(shí)登錄校園網(wǎng)
- Python命令行定時(shí)任務(wù)自動(dòng)化工作流程
- 一文詳解Python定時(shí)任務(wù)觸發(fā)
- Windows下創(chuàng)建定時(shí)任務(wù)執(zhí)行Python腳本的方法實(shí)現(xiàn)
相關(guān)文章
深入了解Python中yield?from語(yǔ)法的使用
yield?from?是在Python3.3才出現(xiàn)的語(yǔ)法,這篇文章主要為大家介紹了yield?from語(yǔ)法的具體使用,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以收藏一下2023-05-05使用基于Python的Tornado框架的HTTP客戶端的教程
這篇文章主要介紹了制作一個(gè)基于Python的Tornado框架的HTTP客戶端的教程,Tornado的異步特性使其能夠獲得很好的性能,需要的朋友可以參考下2015-04-04如何基于Python實(shí)現(xiàn)word文檔重新排版
這篇文章主要介紹了如何基于Python實(shí)現(xiàn)word文檔重新排版,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09基于 Django 的手機(jī)管理系統(tǒng)實(shí)現(xiàn)過(guò)程詳解
這篇文章主要介紹了基于 Django 的手機(jī)管理系統(tǒng)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Python下調(diào)用Linux的Shell命令的方法
有時(shí)候難免需要直接調(diào)用Shell命令來(lái)完成一些比較簡(jiǎn)單的操作,這篇文章主要介紹了Python下調(diào)用Linux的Shell命令的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06Python實(shí)現(xiàn)平行坐標(biāo)圖的繪制(plotly)方式
今天小編就為大家分享一篇Python實(shí)現(xiàn)平行坐標(biāo)圖的繪制(plotly)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11如何利用Python獲取鼠標(biāo)的實(shí)時(shí)位置
這篇文章主要給大家介紹了關(guān)于如何利用Python獲取鼠標(biāo)的實(shí)時(shí)位置的相關(guān)資料,主要利用的是pyautogui,一個(gè)自動(dòng)化鍵鼠操作的Python類庫(kù),需要的朋友可以參考下2022-01-01keras 自定義loss model.add_loss的使用詳解
這篇文章主要介紹了keras 自定義loss model.add_loss的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06