Python使用schedule庫(kù)實(shí)現(xiàn)任務(wù)定時(shí)自動(dòng)化
引言
在Python的自動(dòng)化工具庫(kù)中,schedule是一個(gè)簡(jiǎn)潔又強(qiáng)大的存在。無(wú)論是定時(shí)備份數(shù)據(jù)、周期性抓取網(wǎng)頁(yè),還是定期發(fā)送提醒郵件,schedule庫(kù)都能讓我們的代碼按計(jì)劃精準(zhǔn)執(zhí)行。今天我們就深入了解schedule庫(kù)的使用,助我們成為任務(wù)調(diào)度小能手!
schedule庫(kù)核心函數(shù)速覽
schedule庫(kù)通過(guò)極簡(jiǎn)的語(yǔ)法,實(shí)現(xiàn)復(fù)雜的定時(shí)任務(wù)配置。使用前先通過(guò)pip命令安裝schedule庫(kù):pip install schedule
其核心函數(shù)和方法如下:
1. schedule.every():創(chuàng)建基礎(chǔ)調(diào)度任務(wù)

功能:開(kāi)啟一個(gè)新的調(diào)度任務(wù),后續(xù)可鏈?zhǔn)秸{(diào)用時(shí)間單位和執(zhí)行函數(shù)。
案例:創(chuàng)建一個(gè)每分鐘執(zhí)行一次的任務(wù)框架。
import schedule # 創(chuàng)建1個(gè)調(diào)度任務(wù),默認(rèn)參數(shù)為1 schedule.every()
2. 時(shí)間單位設(shè)置函數(shù)
功能:指定任務(wù)執(zhí)行的時(shí)間間隔的屬性函數(shù):seconds、minutes、hours、days、weeks、monday、tuesday、wednesday、thursday、friday、saturday、sunday
案例:設(shè)置每5分鐘執(zhí)行一次的任務(wù)。
importschedule # 每5分鐘執(zhí)行一次任務(wù) every函數(shù)參數(shù)填5,后續(xù)跟著minutes,表示每5分鐘 schedule.every(5).minutes.do(task_function) # 每2小時(shí)執(zhí)行一次任務(wù) schedule.every(2).hours.do(task_function) # 每3天執(zhí)行一次任務(wù) schedule.every(3).days.do(task_function) # 每周執(zhí)行一次任務(wù) schedule.every().weeks.do(task_function) # 每2周執(zhí)行一次任務(wù) schedule.every(2).weeks.do(task_function) # 每周1執(zhí)行一次任務(wù) schedule.every().monday.do(task_function) # 每周1和周3執(zhí)行一次任務(wù) schedule.every().monday.wednesday.do(task_function) #或者分開(kāi)兩個(gè)任務(wù) schedule.every().monday.do(task_function) schedule.every().wednesday.do(task_function)
3. at():精準(zhǔn)設(shè)置任務(wù)執(zhí)行的具體時(shí)間點(diǎn)
功能:在指定的時(shí)間點(diǎn)執(zhí)行任務(wù),常與時(shí)間周期函數(shù)(如days()、weeks())結(jié)合使用,支持設(shè)置時(shí)、分,格式為HH:MM(24 小時(shí)制) 。通過(guò)at功能,可以實(shí)現(xiàn) “每天早上 9 點(diǎn)”“每周五下午5點(diǎn)” 等精確的定時(shí)需求。
參數(shù):time_str接受一個(gè)字符串類型參數(shù),即具體時(shí)間點(diǎn),如"09:00"、"17:30" 。tz默認(rèn)為None,默認(rèn)采用當(dāng)前時(shí)區(qū)。如果傳入時(shí)區(qū)時(shí)需要安裝pytz庫(kù)。
#每天早上9點(diǎn)執(zhí)行
schedule.every().day.at("09:00").do(task_function)
#每周1早上9點(diǎn)執(zhí)行
schedule.every().monday.at("09:00").do(task_function)
#在東京時(shí)區(qū) 每周1早上9點(diǎn)執(zhí)行
schedule.every().monday.at("09:00","Asia/Tokyo").do(task_function)4. do():指定要執(zhí)行的函數(shù)
功能:關(guān)聯(lián)具體的Python函數(shù),在達(dá)到設(shè)定時(shí)間時(shí)執(zhí)行。
案例:執(zhí)行打印當(dāng)前時(shí)間的函數(shù)
import schedule
import time
def print_current_time():
print(time.strftime("%Y-%m-%d %H:%M:%S"))
# 每10秒打印一次當(dāng)前時(shí)間
schedule.every(10).seconds.do(print_current_time)5. run_pending():檢查并執(zhí)行待處理任務(wù)
功能:檢查是否有到期任務(wù),若有則執(zhí)行,需在循環(huán)中持續(xù)調(diào)用。
案例:持續(xù)運(yùn)行任務(wù)調(diào)度循環(huán)
import schedule
import time
def task():
print("任務(wù)執(zhí)行!")
schedule.every(2).seconds.do(task)
while True:
schedule.run_pending()6. clear():清除所有任務(wù)
功能:刪除所有已設(shè)置的調(diào)度任務(wù)。
案例:清空所有定時(shí)任務(wù)
import schedule # 設(shè)置兩個(gè)任務(wù) schedule.every(1).minutes.do(task1) schedule.every(2).minutes.do(task2) # 清空所有任務(wù) schedule.clear()
7. cancel_job(job):取消特定任務(wù)
功能:移除指定的調(diào)度任務(wù),job為do()方法的返回值。
案例:取消特定任務(wù)
import schedule
def task():
print("任務(wù)執(zhí)行!")
job = schedule.every(3).seconds.do(task)
#取消任務(wù)
schedule.cancel_job(job)二、案例
案例 1:定時(shí)發(fā)送郵件提醒
import schedule
import time
import smtplib
from email.mime.text import MIMEText
def send_email():
msg = MIMEText('這是定時(shí)發(fā)送的郵件提醒!', 'plain', 'utf-8')
msg['Subject'] = '定時(shí)郵件'
msg['From'] = 'xxx@xxx.com'
msg['To'] ='xxx@xxx.com'
try:
server = smtplib.SMTP('smtp.qq.com', 587)
server.starttls()
server.login(msg['From'], 'xxxpassword')
server.sendmail(msg['From'],msg['To'], msg.as_string())
server.quit()
print("郵件發(fā)送成功!")
except Exception as e:
print(f"郵件發(fā)送失敗: {e}")
# 每天早上8點(diǎn)發(fā)送郵件
schedule.every().day.at("08:00").do(send_email)
while True:
schedule.run_pending()
time.sleep(1)案例 2:實(shí)現(xiàn)定時(shí)數(shù)據(jù)庫(kù)備份
import schedule
import time
import subprocess
def backup_data():
backup_command = "mysqldump -u username -ppassword database_name > backup.sql"
try:
subprocess.run(backup_command, shell=True, check=True)
print("數(shù)據(jù)庫(kù)備份成功!")
except subprocess.CalledProcessError as e:
print(f"數(shù)據(jù)庫(kù)備份失敗: {e}")
# 每隔2天執(zhí)行一次數(shù)據(jù)備份任務(wù)
schedule.every(2).days.do(backup_data)
while True:
schedule.run_pending()
time.sleep(1)三、避坑指南
1.循環(huán)阻塞問(wèn)題
問(wèn)題:schedule.run_pending()需在循環(huán)中調(diào)用,但循環(huán)可能會(huì)阻塞主線程。
解決:可以使用多線程或多進(jìn)程運(yùn)行調(diào)度循環(huán),避免影響其他程序執(zhí)行。例如:
import schedule
import time
import threading
def run_schedule():
while True:
schedule.run_pending()
time.sleep(1)
# 啟動(dòng)調(diào)度循環(huán)線程 不影響主線程
schedule_thread = threading.Thread(target=run_schedule)
schedule_thread.start()2.時(shí)區(qū)與時(shí)間格式
問(wèn)題:使用at()方法設(shè)置時(shí)間時(shí),默認(rèn)使用系統(tǒng)時(shí)區(qū),可能與預(yù)期不符。
解決:如需跨時(shí)區(qū)調(diào)度,可結(jié)合pytz庫(kù)進(jìn)行時(shí)區(qū)轉(zhuǎn)換,確保時(shí)間準(zhǔn)確。
一些常用見(jiàn)時(shí)區(qū):
- 亞洲時(shí)區(qū):Asia/Shanghai:中國(guó)上海(北京時(shí)間)
Asia/Tokyo:日本東京時(shí)區(qū)
Asia/Kolkata:印度加爾各答時(shí)區(qū)
2. 美洲時(shí)區(qū):America/New_York:美國(guó)紐約時(shí)區(qū)
America/Los_Angeles:美國(guó)洛杉磯時(shí)區(qū)
America/Toronto:加拿大多倫多時(shí)區(qū)
3. 歐洲時(shí)區(qū):Europe/London:英國(guó)倫敦時(shí)區(qū)
Europe/Paris:法國(guó)巴黎時(shí)區(qū)
Europe/Moscow:俄羅斯莫斯科時(shí)區(qū)
4. 大洋洲時(shí)區(qū):Australia/Sydney:澳大利亞悉尼時(shí)區(qū)
Pacific/Auckland:新西蘭奧克蘭時(shí)區(qū)
5. 非洲時(shí)區(qū):Africa/Cairo:埃及開(kāi)羅時(shí)區(qū)
Africa/Johannesburg:南非約翰內(nèi)斯堡時(shí)區(qū)
掌握schedule庫(kù)的這些要點(diǎn),我們就就能輕松實(shí)現(xiàn)各類任務(wù)的定時(shí)自動(dòng)化。無(wú)論是個(gè)人項(xiàng)目還是工作中的流程優(yōu)化,它都能成為你的得力助手!如果在使用過(guò)程中遇到問(wèn)題,歡迎在評(píng)論區(qū)留言交流,謝謝大家的閱讀!
以上就是Python使用schedule庫(kù)實(shí)現(xiàn)任務(wù)定時(shí)自動(dòng)化的詳細(xì)內(nèi)容,更多關(guān)于Python schedule庫(kù)任務(wù)定時(shí)自動(dòng)化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Opencv-Python圖像透視變換cv2.warpPerspective的示例
今天小編就為大家分享一篇關(guān)于Opencv-Python圖像透視變換cv2.warpPerspective的示例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-04-04
Python中的變量及簡(jiǎn)單數(shù)據(jù)類型應(yīng)用
這篇文章主要介紹了Python中的變量及簡(jiǎn)單數(shù)據(jù)類型應(yīng)用,簡(jiǎn)單的數(shù)據(jù)類型包括字符串和數(shù)字,更多詳細(xì)內(nèi)容,需要的小伙伴可以參考一下2022-03-03
python中reversed與reverse的區(qū)別解析
reverse()是python中列表的一個(gè)內(nèi)置方法(在字典、字符串和元組中沒(méi)有這個(gè)內(nèi)置方法),用于列表中數(shù)據(jù)的反轉(zhuǎn),這篇文章主要介紹了python中reversed與reverse的區(qū)別,需要的朋友可以參考下2023-03-03
在keras下實(shí)現(xiàn)多個(gè)模型的融合方式
這篇文章主要介紹了在keras下實(shí)現(xiàn)多個(gè)模型的融合方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05
Python中的支持向量機(jī)SVM的使用(附實(shí)例代碼)
這篇文章主要介紹了Python中的支持向量機(jī)SVM的使用(附實(shí)例代碼),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
python curl2pyreqs 生成接口腳本實(shí)戰(zhàn)教程
這篇文章主要介紹了python curl2pyreqs 生成接口腳本實(shí)戰(zhàn)教程,首先下載 curl2pyreqs 庫(kù),打開(kāi)調(diào)試模式,在Network這里獲取接口的cURL,需要的朋友可以參考下2023-10-10

