最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用APScheduler設(shè)置每月固定日期運(yùn)行的定時(shí)任務(wù)

 更新時(shí)間:2026年01月21日 08:39:15   作者:幸福清風(fēng)  
在開發(fā)自動(dòng)化腳本或后臺(tái)服務(wù)時(shí),我們經(jīng)常需要讓某些任務(wù)按照特定的時(shí)間周期自動(dòng)執(zhí)行,Python 的 APScheduler(Advanced Python Scheduler)庫(kù)是一個(gè)強(qiáng)大且靈活的工具,能夠輕松地幫助我們實(shí)現(xiàn)這些需求,下面我們就來看看具體實(shí)現(xiàn)方法吧

在開發(fā)自動(dòng)化腳本或后臺(tái)服務(wù)時(shí),我們經(jīng)常需要讓某些任務(wù)按照特定的時(shí)間周期自動(dòng)執(zhí)行。例如,每月初生成報(bào)告、每月末清理日志文件,或者在每月的某個(gè)特定日期發(fā)送通知。Python 的 APScheduler(Advanced Python Scheduler)庫(kù)是一個(gè)強(qiáng)大且靈活的工具,能夠輕松地幫助我們實(shí)現(xiàn)這些需求。

本文將詳細(xì)介紹如何利用 APScheduler 的 Cron 觸發(fā)器(CronTrigger)來設(shè)置每月固定日期運(yùn)行的定時(shí)任務(wù)。

1. 理解 Cron 表達(dá)式與 APScheduler

APScheduler 提供了多種觸發(fā)器類型,其中 CronTrigger 最適合處理復(fù)雜的周期性任務(wù)。它借鑒了 Unix/Linux 系統(tǒng)中的 Cron 表達(dá)式概念,但提供了更友好的 Python 接口。

一個(gè)典型的 Cron 表達(dá)式由六個(gè)(或七個(gè))字段組成,分別代表秒、分、時(shí)、日(月)、月、周(日)、年(可選)。在 APScheduler 中,我們通常只需要關(guān)注前五個(gè)字段:

  • second (秒)
  • minute (分鐘)
  • hour (小時(shí))
  • day (日,即每月的第幾天)
  • month (月)
  • day_of_week (周,即一周的第幾天)

要設(shè)置每月固定日期運(yùn)行,關(guān)鍵在于正確配置 day 參數(shù)。

2. 環(huán)境準(zhǔn)備

首先,確保你已經(jīng)安裝了 APScheduler 庫(kù)。如果尚未安裝,請(qǐng)使用 pip 進(jìn)行安裝:

pip install apscheduler

3. 核心實(shí)現(xiàn):設(shè)置每月固定日期

我們將通過幾個(gè)具體的例子來展示不同的設(shè)置方法。

示例 1:每月特定一天運(yùn)行

這是最常見的場(chǎng)景。假設(shè)我們需要在每月 15 號(hào)的上午 9:00 執(zhí)行一個(gè)任務(wù)。

from datetime import datetime
from apscheduler.schedulers.blocking import BlockingScheduler # 導(dǎo)入阻塞型調(diào)度器

def my_monthly_task():
    """
    定義一個(gè)簡(jiǎn)單的任務(wù)函數(shù)
    """
    current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    print(f"【任務(wù)執(zhí)行】 - 當(dāng)前時(shí)間: {current_time}")
    # 在這里放置你的實(shí)際業(yè)務(wù)邏輯
    # 例如:generate_report(), send_email(), cleanup_logs() 等

# --- 步驟 1: 創(chuàng)建調(diào)度器實(shí)例 ---
# BlockingScheduler 適用于腳本運(yùn)行,它會(huì)阻塞主線程
scheduler = BlockingScheduler()

# --- 步驟 2: 添加定時(shí)任務(wù) ---
scheduler.add_job(
    func=my_monthly_task,      # 要執(zhí)行的函數(shù)對(duì)象
    trigger='cron',            # 指定使用 Cron 觸發(fā)器
    day=15,                    # <--- 關(guān)鍵:指定每月的第15天
    hour=9,                    # 指定在 9 點(diǎn)執(zhí)行
    minute=0,                  # 指定在 0 分執(zhí)行
    id='monthly_task_15th'     # (可選) 為任務(wù)指定一個(gè)唯一ID,方便管理
)

print("定時(shí)任務(wù)已添加:每月15號(hào)上午9:00執(zhí)行。")

# --- 步驟 3: 啟動(dòng)調(diào)度器 ---
try:
    print("調(diào)度器已啟動(dòng),等待任務(wù)執(zhí)行...")
    scheduler.start() # 啟動(dòng)調(diào)度器,程序會(huì)在此處保持運(yùn)行狀態(tài)
except KeyboardInterrupt:
    print("\n接收到中斷信號(hào),調(diào)度器已關(guān)閉。")
    scheduler.shutdown(wait=True) # 平滑關(guān)閉調(diào)度器

在這個(gè)例子中,day=15 明確指定了任務(wù)只會(huì)在每個(gè)月的 15 號(hào)運(yùn)行。需要注意的是,如果你設(shè)置 day=31,而當(dāng)月沒有 31 號(hào)(如 2 月),那么該月的任務(wù)將不會(huì)被觸發(fā)。

示例 2:每月特定幾天運(yùn)行

有時(shí),我們需要在每月的多個(gè)固定日期都執(zhí)行任務(wù)。例如,每月 1 號(hào)和 15 號(hào)。這時(shí),我們可以將 day 參數(shù)設(shè)置為列表 [1, 15] 或逗號(hào)分隔的字符串 '1,15'

# ... (導(dǎo)入和函數(shù)定義同上)

# 添加任務(wù):每月1號(hào)和15號(hào)的上午9:00執(zhí)行
scheduler.add_job(
    func=my_monthly_task,
    trigger='cron',
    day='1,15',               # <--- 指定每月的1號(hào)和15號(hào)
    # 或者: day=[1, 15],
    hour=9,
    minute=0,
    id='monthly_task_1st_and_15th'
)

print("定時(shí)任務(wù)已添加:每月1號(hào)和15號(hào)上午9:00執(zhí)行。")

# ... (啟動(dòng)調(diào)度器)

示例 3:每月最后一天運(yùn)行

對(duì)于月末操作,比如備份數(shù)據(jù)或結(jié)算,我們可能需要在每月的最后一天執(zhí)行任務(wù)。APScheduler 提供了便捷的表達(dá)方式 day='last'

# ... (導(dǎo)入和函數(shù)定義同上)

# 添加任務(wù):每月最后一天的上午9:00執(zhí)行
scheduler.add_job(
    func=my_monthly_task,
    trigger='cron',
    day='last',               # <--- 指定每月的最后一天
    hour=9,
    minute=0,
    id='monthly_task_last_day'
)

print("定時(shí)任務(wù)已添加:每月最后一天上午9:00執(zhí)行。")

# ... (啟動(dòng)調(diào)度器)

這種方式非常智能,它能自動(dòng)識(shí)別不同月份以及閏年的天數(shù)差異。

示例 4:每月特定周幾(如每月第一個(gè)周一)

除了按日期,我們有時(shí)還需要按“第 X 個(gè)周 Y”來安排任務(wù)。例如,每月第一個(gè)周一。APScheduler 也支持這種表達(dá)。

# ... (導(dǎo)入和函數(shù)定義同上)

# 添加任務(wù):每月第一個(gè)周日的上午9:00執(zhí)行
# 注意:day_of_week='sun' 代表周日,'mon' 代表周一,以此類推
scheduler.add_job(
    func=my_monthly_task,
    trigger='cron',
    day='1st sun',            # <--- 指定每月的第一個(gè)周日 ('1st' for first, '2nd' for second, etc.)
    hour=9,
    minute=0,
    id='monthly_task_first_sunday'
)

print("定時(shí)任務(wù)已添加:每月第一個(gè)周日上午9:00執(zhí)行。")

# ... (啟動(dòng)調(diào)度器)

類似的,'2nd mon' 表示每月第二個(gè)周一,'3rd tue' 表示每月第三個(gè)周二,等等。如果某個(gè)月份不滿足條件(例如某月沒有第五個(gè)周日),則該月的任務(wù)不會(huì)執(zhí)行。

4. 總結(jié)

通過 APSchedulerCronTrigger,我們可以非常靈活地配置各種周期性任務(wù)。

  • day=N: 每月 N 號(hào)。
  • day='N,M'day=[N, M]: 每月 N 號(hào)和 M 號(hào)。
  • day='last': 每月最后一天。
  • day='last-N': 每月倒數(shù)第 N 天。
  • day='1st mon', day='2nd tue': 每月第一個(gè)周一,第二個(gè)周二等。

結(jié)合 hourminute 等參數(shù),可以精確控制任務(wù)在每天的具體時(shí)刻執(zhí)行。

到此這篇關(guān)于Python使用APScheduler設(shè)置每月固定日期運(yùn)行的定時(shí)任務(wù)的文章就介紹到這了,更多相關(guān)Python APScheduler定時(shí)任務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python使用js2py庫(kù)運(yùn)行js代碼

    python使用js2py庫(kù)運(yùn)行js代碼

    本文主要介紹了thon使用js2py庫(kù)運(yùn)行js代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Python中的defaultdict與__missing__()使用介紹

    Python中的defaultdict與__missing__()使用介紹

    下面這篇文章主要給大家介紹了關(guān)于Python中defaultdict使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02
  • 詳解Python中映射類型(字典)操作符的概念和使用

    詳解Python中映射類型(字典)操作符的概念和使用

    這篇文章主要介紹了詳解Python中映射類型(字典)操作符的概念和使用,字典是目前Python中唯一的映射類型,需要的朋友可以參考下
    2015-08-08
  • Python打包文件夾的方法小結(jié)(zip,tar,tar.gz等)

    Python打包文件夾的方法小結(jié)(zip,tar,tar.gz等)

    這篇文章主要介紹了Python打包文件夾的方法,結(jié)合實(shí)例形式總結(jié)分析了Python打包成zip,tar,tar.gz等格式文件的操作技巧,需要的朋友可以參考下
    2016-09-09
  • Python中實(shí)現(xiàn)限定抽獎(jiǎng)次數(shù)的機(jī)制的項(xiàng)目實(shí)踐

    Python中實(shí)現(xiàn)限定抽獎(jiǎng)次數(shù)的機(jī)制的項(xiàng)目實(shí)踐

    抽獎(jiǎng)系統(tǒng)作為吸引用戶、提高用戶參與度和活躍度的重要手段,本文主要介紹了Python中實(shí)現(xiàn)限定抽獎(jiǎng)次數(shù)的機(jī)制的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • 一文搞懂Python中輕量型數(shù)據(jù)庫(kù)SQLite3的用法

    一文搞懂Python中輕量型數(shù)據(jù)庫(kù)SQLite3的用法

    SQLite 是一個(gè)極受歡迎的輕量級(jí)數(shù)據(jù)庫(kù),它被廣泛應(yīng)用于各種大小的項(xiàng)目中,本文將詳細(xì)介紹 Python 中如何使用 SQLite3 庫(kù)進(jìn)行數(shù)據(jù)庫(kù)操作,感興趣的小伙伴可以了解下
    2025-07-07
  • Python自然語(yǔ)言處理 NLTK 庫(kù)用法入門教程【經(jīng)典】

    Python自然語(yǔ)言處理 NLTK 庫(kù)用法入門教程【經(jīng)典】

    這篇文章主要介紹了Python自然語(yǔ)言處理 NLTK 庫(kù)用法,結(jié)合實(shí)例形式詳細(xì)分析了NLTK庫(kù)的功能、安裝、引用以及使用NLTK庫(kù)進(jìn)行文本分析的各種常用操作技巧,需要的朋友可以參考下
    2018-06-06
  • Pandas庫(kù)之DataFrame使用的學(xué)習(xí)筆記

    Pandas庫(kù)之DataFrame使用的學(xué)習(xí)筆記

    這篇文章主要介紹了Pandas庫(kù)之DataFrame使用的學(xué)習(xí)筆記,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 通過Python將MP4視頻轉(zhuǎn)換為GIF動(dòng)畫

    通過Python將MP4視頻轉(zhuǎn)換為GIF動(dòng)畫

    Python可用于讀取常見的MP4視頻格式并將其轉(zhuǎn)換為GIF動(dòng)畫。本文將詳細(xì)為大家介紹實(shí)現(xiàn)的過程,文中的代碼具有一定的參考價(jià)值,感興趣的小伙伴可以學(xué)習(xí)一下
    2021-12-12
  • python 讀取文件并把矩陣轉(zhuǎn)成numpy的兩種方法

    python 讀取文件并把矩陣轉(zhuǎn)成numpy的兩種方法

    今天小編就為大家分享一篇python 讀取文件并把矩陣轉(zhuǎn)成numpy的兩種方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02

最新評(píng)論

黄平县| 家居| 于都县| 桓台县| 黄梅县| 玛多县| 仁布县| 深泽县| 罗甸县| 靖宇县| 当雄县| 阳朔县| 江达县| 上虞市| 泸水县| 和平区| 焦作市| 谢通门县| 邵武市| 景东| 阿拉尔市| 鄂州市| 周至县| 柏乡县| 疏附县| 石林| 科技| 东辽县| 普宁市| 崇仁县| 濉溪县| 勃利县| 南汇区| 元谋县| 阳西县| 稻城县| 清丰县| 辽源市| 黑龙江省| 大田县| 都兰县|