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

Python高效定時任務處理APScheduler庫深入學習

 更新時間:2023年08月14日 11:08:05   作者:子午  
這篇文章主要為大家介紹了Python高效定時任務處理APScheduler庫深入學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

介紹

APScheduler是Python中一個強大的第三方庫,用于在后臺執(zhí)行定時任務。它允許我們根據(jù)設定的時間間隔、日期規(guī)則或特定時間來執(zhí)行任務,適用于定時執(zhí)行腳本、定時發(fā)送郵件、定時處理數(shù)據(jù)等場景。APScheduler的功能使得在Python中實現(xiàn)定時任務變得非常簡單和高效。本文將從入門到精通地介紹APScheduler庫的使用方法,帶你掌握在Python中實現(xiàn)定時任務的技巧。

  • 安裝和導入
  • 創(chuàng)建定時任務
  • 定時任務觸發(fā)器
  • 任務存儲
  • 并發(fā)執(zhí)行
  • 阻塞和非阻塞
  • 錯誤處理
  • 立即執(zhí)行任務
  • 調(diào)度器持久化
  • 任務監(jiān)聽器
  • 移除定時任務

1. 安裝和導入

首先,我們需要安裝APScheduler庫??梢允褂胮ip命令進行安裝:

pip install apscheduler

安裝完成后,我們可以在Python代碼中導入APScheduler:

from apscheduler.schedulers.background import BackgroundScheduler

2. 創(chuàng)建定時任務

APScheduler提供了BackgroundScheduler和BlockingScheduler兩種類型的調(diào)度器,用于創(chuàng)建定時任務。BackgroundScheduler在后臺運行,不會阻塞主線程;而BlockingScheduler會阻塞主線程直到所有任務完成。

from apscheduler.schedulers.background import BackgroundScheduler
import time
# 創(chuàng)建后臺調(diào)度器
scheduler = BackgroundScheduler()
# 定義任務函數(shù)
def job():
 print("定時任務執(zhí)行:", time.strftime("%Y-%m-%d %H:%M:%S"))
 # 添加定時任務,每隔5秒執(zhí)行一次
scheduler.add_job(job, 'interval', seconds=5)
# 啟動調(diào)度器
scheduler.start()
# 主線程等待一段時間后結(jié)束
time.sleep(20)
# 關閉調(diào)度器
scheduler.shutdown()
print("主線程結(jié)束")

在上述代碼中,我們首先創(chuàng)建了一個后臺調(diào)度器scheduler,然后定義了一個名為job的任務函數(shù),在其中打印當前時間。使用scheduler.add_job()添加了一個定時任務,設置為每隔5秒執(zhí)行一次。然后,我們啟動了調(diào)度器scheduler,讓定時任務在后臺執(zhí)行。主線程等待20秒后結(jié)束,并調(diào)用scheduler.shutdown()關閉調(diào)度器。

3. 定時任務觸發(fā)器

APScheduler提供了多種觸發(fā)器類型,用于設置定時任務的觸發(fā)條件。

interval觸發(fā)器: 按照設定的時間間隔來觸發(fā)任務。

from apscheduler.schedulers.background import BackgroundScheduler
import time
# 創(chuàng)建后臺調(diào)度器
scheduler = BackgroundScheduler()
# 定義任務函數(shù)
def job():
 print("定時任務執(zhí)行:", time.strftime("%Y-%m-%d %H:%M:%S"))
 # 添加定時任務,每隔5秒執(zhí)行一次
scheduler.add_job(job, 'interval', seconds=5)
# 啟動調(diào)度器
scheduler.start()
# 主線程等待一段時間后結(jié)束
time.sleep(20)
# 關閉調(diào)度器
scheduler.shutdown()
print("主線程結(jié)束")

在上述代碼中,我們使用'interval'觸發(fā)器,設置任務每隔5秒執(zhí)行一次。

cron觸發(fā)器: 使用類似于Linux中cron表達式的規(guī)則來觸發(fā)任務,可以精確到秒。

from apscheduler.schedulers.background import BackgroundScheduler
import time
# 創(chuàng)建后臺調(diào)度器
scheduler = BackgroundScheduler()
# 定義任務函數(shù)
def job():
 print("定時任務執(zhí)行:", time.strftime("%Y-%m-%d %H:%M:%S"))
 # 添加定時任務,每天的13點30分觸發(fā)任務
scheduler.add_job(job, 'cron', hour=13, minute=30)
# 啟動調(diào)度器
scheduler.start()
# 主線程等待一段時間后結(jié)束
time.sleep(60)
# 關閉調(diào)度器
scheduler.shutdown()
print("主線程結(jié)束")

在上述代碼中,我們使用'cron'觸發(fā)器,設置任務每天的13點30分觸發(fā)。

date觸發(fā)器: 在指定的時間點觸發(fā)任務。

from apscheduler.schedulers.background import BackgroundScheduler
import time
# 創(chuàng)建后臺調(diào)度器
scheduler = BackgroundScheduler()
# 定義任務函數(shù)
def job():
 print("定時任務執(zhí)行:", time.strftime("%Y-%m-%d %H:%M:%S"))
 # 添加定時任務,設置任務在2023年7月31日10點30分觸發(fā)
scheduler.add_job(job, 'date', run_date='2023-07-31 10:30:00')
# 啟動調(diào)度器
scheduler.start()
# 主線程等待一段時間后結(jié)束
time.sleep(60)
# 關閉調(diào)度器
scheduler.shutdown()
print("主線程結(jié)束")

在上述代碼中,我們使用'date'觸發(fā)器,設置任務在2023年7月31日10點30分觸發(fā)。

4. 任務存儲

APScheduler支持將任務存儲在不同的后端存儲中,如內(nèi)存、數(shù)據(jù)庫等。默認情況下,任務是存儲在內(nèi)存中的。

from apscheduler.schedulers.background import BackgroundScheduler
import time
# 創(chuàng)建后臺調(diào)度器
scheduler = BackgroundScheduler()
# 定義任務函數(shù)
def job():
 print("定時任務執(zhí)行:", time.strftime("%Y-%m-%d %H:%M:%S"))
 # 添加定時任務,每隔5秒執(zhí)行一次
scheduler.add_job(job, 'interval', seconds=5)
# 啟動調(diào)度器
scheduler.start()
# 主線程等待一段時間后結(jié)束
time.sleep(20)
# 關閉調(diào)度器
scheduler.shutdown()
print("主線程結(jié)束")

在上述代碼中,我們使用默認的內(nèi)存存儲來存儲任務。

如果需要將任務存儲在數(shù)據(jù)庫中,可以使用jobstores參數(shù)來設置。

from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
import time
# 創(chuàng)建后臺調(diào)度器
scheduler = BackgroundScheduler()
# 創(chuàng)建數(shù)據(jù)庫存儲
jobstores = {
 'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')
}
# 定義任務函數(shù)
def job():
 print("定時任務執(zhí)行:", time.strftime("%Y-%m-%d %H:%M:%S"))
 # 添加定時任務,每隔5秒執(zhí)行一次
scheduler.add_job(job, 'interval', seconds=5)
# 啟動調(diào)度器
scheduler.start()
# 主線程等待一段時間后結(jié)束
time.sleep(20)
# 關閉調(diào)度器
scheduler.shutdown()
print("主線程結(jié)束")

在上述代碼中,我們使用了SQLAlchemyJobStore來將任務存儲在SQLite數(shù)據(jù)庫中。

5. 并發(fā)執(zhí)行

默認情況下,APScheduler會將任務串行執(zhí)行,也就是說一個任務結(jié)束后才會執(zhí)行下一個任務。如果希望并發(fā)執(zhí)行多個任務,可以使用max_instances參數(shù)來設置。

from apscheduler.schedulers.background import BackgroundScheduler
import time
# 創(chuàng)建后臺調(diào)度器
scheduler = BackgroundScheduler()
# 定義任務函數(shù)
def job(index):
 print(f"定時任務{(diào)index}執(zhí)行:", time.strftime("%Y-%m-%d %H:%M:%S"))
 # 添加定時任務,每隔5秒執(zhí)行一次,最多并發(fā)3個任務
scheduler.add_job(job, 'interval', seconds=5, args=[1], max_instances=3)
scheduler.add_job(job, 'interval', seconds=5, args=[2], max_instances=3)
scheduler.add_job(job, 'interval', seconds=5, args=[3], max_instances=3)
# 啟動調(diào)度器
scheduler.start()
# 主線程等待一段時間后結(jié)束
time.sleep(20)
# 關閉調(diào)度器
scheduler.shutdown()
print("主線程結(jié)束")

在上述代碼中,我們使用了args參數(shù)傳遞參數(shù)給任務函數(shù),并使用max_instances參數(shù)設置最多并發(fā)3個任務。

6. 阻塞和非阻塞

APScheduler提供了阻塞和非阻塞兩種調(diào)度器類型。

阻塞調(diào)度器: 在調(diào)度器啟動后,會阻塞主線程直到所有任務完成。

from apscheduler.schedulers.blocking import BlockingScheduler
import time
# 創(chuàng)建阻塞調(diào)度器
scheduler = BlockingScheduler()
# 定義任務函數(shù)
def job():
 print("定時任務執(zhí)行:", time.strftime("%Y-%m-%d %H:%M:%S"))
 # 添加定時任務,每隔5秒執(zhí)行一次
scheduler.add_job(job, 'interval', seconds=5)
# 啟動調(diào)度器
scheduler.start()
print("主線程結(jié)束")

非阻塞調(diào)度器: 在調(diào)度器啟動后,不會阻塞主線程。

from apscheduler.schedulers.background import BackgroundScheduler
import time
# 創(chuàng)建后臺調(diào)度器
scheduler = BackgroundScheduler()
# 定義任務函數(shù)
def job():
 print("定時任務執(zhí)行:", time.strftime("%Y-%m-%d %H:%M:%S"))
 # 添加定時任務,每隔5秒執(zhí)行一次
scheduler.add_job(job, 'interval', seconds=5)
# 啟動調(diào)度器
scheduler.start()
# 主線程等待一段時間后結(jié)束
time.sleep(20)
# 關閉調(diào)度器
scheduler.shutdown()
print("主線程結(jié)束")

在上述代碼中,我們分別使用BlockingScheduler和BackgroundScheduler創(chuàng)建了阻塞和非阻塞調(diào)度器。

7. 錯誤處理

在任務執(zhí)行過程中,可能會出現(xiàn)異常。APScheduler提供了異常處理機制,我們可以通過try...except...捕獲任務函數(shù)中的異常,并進行相應的處理。

from apscheduler.schedulers.background import BackgroundScheduler
import time
# 創(chuàng)建后臺調(diào)度器
scheduler = BackgroundScheduler()
# 定義任務函數(shù)
def job():
 try:
     print("定時任務執(zhí)行:", time.strftime("%Y-%m-%d %H:%M:%S"))
     # 拋出一個異常
     raise ValueError("任務出現(xiàn)異常")
 except Exception as e:
     print("任務執(zhí)行過程中發(fā)生異常:", str(e))
     # 添加定時任務,每隔5秒執(zhí)行一次
scheduler.add_job(job, 'interval', seconds=5)
# 啟動調(diào)度器
scheduler.start()
# 主線程等待一段時間后結(jié)束
time.sleep(20)
# 關閉調(diào)度器
scheduler.shutdown()
print("主線程結(jié)束")

在上述代碼中,我們在任務函數(shù)中拋出了一個ValueError異常,并通過try...except...捕獲并輸出了異常信息。

8. 立即執(zhí)行任務

有時候我們可能需要立即執(zhí)行一個任務,而不是等到下次觸發(fā)時間。APScheduler提供了run_job方法來立即執(zhí)行任務。

from apscheduler.schedulers.background import BackgroundScheduler
import time
# 創(chuàng)建后臺調(diào)度器
scheduler = BackgroundScheduler()
# 定義任務函數(shù)
def job():
 print("定時任務執(zhí)行:", time.strftime("%Y-%m-%d %H:%M:%S"))
 # 添加定時任務,每隔5秒執(zhí)行一次
scheduler.add_job(job, 'interval', seconds=5)
# 啟動調(diào)度器
scheduler.start()
# 立即執(zhí)行任務
scheduler.run_job(job)
# 主線程等待一段時間后結(jié)束
time.sleep(20)
# 關閉調(diào)度器
scheduler.shutdown()
print("主線程結(jié)束")

在上述代碼中,我們使用scheduler.run_job(job)方法立即執(zhí)行了任務。

9. 調(diào)度器持久化

在實際應用中,我們可能需要將調(diào)度器的配置保存到文件中,以便在下次啟動時恢復。

from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
import time
# 創(chuàng)建數(shù)據(jù)庫存儲
jobstores = {
 'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')
}
# 創(chuàng)建后臺調(diào)度器,并指定jobstores參數(shù)
scheduler = BackgroundScheduler(jobstores=jobstores)
# 定義任務函數(shù)
def job():
 print("定時任務執(zhí)行:", time.strftime("%Y-%m-%d %H:%M:%S"))
 # 添加定時任務,每隔5秒執(zhí)行一次
scheduler.add_job(job, 'interval', seconds=5)
# 啟動調(diào)度器
scheduler.start()
# 主線程等待一段時間后結(jié)束
time.sleep(20)
# 關閉調(diào)度器
scheduler.shutdown()
print("主線程結(jié)束")

在上述代碼中,我們創(chuàng)建了一個數(shù)據(jù)庫存儲jobstores,并在創(chuàng)建后臺調(diào)度器時指定了jobstores參數(shù)。這樣,在調(diào)度器運行過程中,任務的配置將會被持久化到數(shù)據(jù)庫中。

10. 任務監(jiān)聽器

APScheduler提供了任務監(jiān)聽器,用于監(jiān)聽任務的狀態(tài)變化。我們可以通過add_listener方法添加監(jiān)聽器,并在任務狀態(tài)發(fā)生變化時進行相應的處理。

from apscheduler.schedulers.background import BackgroundScheduler
import time
# 創(chuàng)建后臺調(diào)度器
scheduler = BackgroundScheduler()
# 定義任務函數(shù)
def job():
 print("定時任務執(zhí)行:", time.strftime("%Y-%m-%d %H:%M:%S"))
 # 添加定時任務,每隔5秒執(zhí)行一次
scheduler.add_job(job, 'interval', seconds=5)
# 定義任務監(jiān)聽器
def my_listener(event):
 if event.exception:
     print("任務執(zhí)行過程中發(fā)生異常:", str(event.exception))
 else:
     print("任務執(zhí)行成功")
     # 添加任務監(jiān)聽器
scheduler.add_listener(my_listener, mask='all')
# 啟動調(diào)度器
scheduler.start()
# 主線程等待一段時間后結(jié)束
time.sleep(20)
# 關閉調(diào)度器
scheduler.shutdown()
print("主線程結(jié)束")

在上述代碼中,我們創(chuàng)建了一個任務監(jiān)聽器my_listener,并在任務執(zhí)行過程中通過if...else...判斷是否出現(xiàn)異常。然后通過scheduler.add_listener(my_listener, mask='all')方法添加了監(jiān)聽器。

11. 移除定時任務

如果我們希望在調(diào)度器運行過程中移除某個定時任務,可以使用scheduler.remove_job(job_id)方法。

from apscheduler.schedulers.background import BackgroundScheduler
import time
# 創(chuàng)建后臺調(diào)度器
scheduler = BackgroundScheduler()
# 定義任務函數(shù)
def job():
 print("定時任務執(zhí)行:", time.strftime("%Y-%m-%d %H:%M:%S"))
 # 添加定時任務,每隔5秒執(zhí)行一次,并獲取任務ID
job_id = scheduler.add_job(job, 'interval', seconds=5).id
# 啟動調(diào)度器
scheduler.start()
# 主線程等待一段時間后移除定時任務
time.sleep(10)
scheduler.remove_job(job_id)
# 主線程等待一段時間后結(jié)束
time.sleep(10)
# 關閉調(diào)度器
scheduler.shutdown()
print("主線程結(jié)束")

在上述代碼中,我們通過scheduler.add_job(job, 'interval', seconds=5).id獲取了定時任務的ID,并使用scheduler.remove_job(job_id)移除了定時任務。

總結(jié)

通過本文的介紹,我們學習了APScheduler庫的基本用法,包括創(chuàng)建定時任務、定時任務觸發(fā)器、任務存儲、并發(fā)執(zhí)行、阻塞和非阻塞調(diào)度器、錯誤處理、立即執(zhí)行任務、調(diào)度器持久化、任務監(jiān)聽器和移除定時任務等。APScheduler為Python開發(fā)者提供了一個強大的定時任務調(diào)度框架,使得在Python中實現(xiàn)定時任務變得非常簡單和高效。掌握APScheduler的使用將為我們的項目和程序帶來很大的便利。

以上就是Python高效定時任務處理APScheduler庫深入學習的詳細內(nèi)容,更多關于Python APScheduler定時任務的資料請關注腳本之家其它相關文章!

相關文章

  • Python之用戶輸入的實例

    Python之用戶輸入的實例

    今天小編就為大家分享一篇Python之用戶輸入的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python文本亂碼根本原因和解決方案

    Python文本亂碼根本原因和解決方案

    亂碼是每個Python開發(fā)者,尤其是處理中文、日文等非ASCII字符時,都會遇到的噩夢,這篇文章將帶你徹底理解亂碼產(chǎn)生的根本原因,并提供一套行之有效的解決方案和最佳實踐,需要的朋友可以參考下
    2026-02-02
  • 用python寫一個windows消息提醒小程序

    用python寫一個windows消息提醒小程序

    上班時,由于自己經(jīng)常coding到忘記時間,經(jīng)常會一坐坐很久,搞的勞資腰都不好了,所以沒事閑的寫了個久坐提醒的小程序,文中有詳細的代碼示例,講解的非常詳細,感興趣的朋友可以參考下
    2023-12-12
  • 教你利用PyTorch實現(xiàn)sin函數(shù)模擬

    教你利用PyTorch實現(xiàn)sin函數(shù)模擬

    這篇文章主要給大家介紹了關于教你利用PyTorch實現(xiàn)sin函數(shù)模擬的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-01-01
  • Django中的函數(shù)視圖和類視圖以及路由的定義方式

    Django中的函數(shù)視圖和類視圖以及路由的定義方式

    Django視圖分函數(shù)視圖和類視圖,前者用函數(shù)處理請求,后者繼承View類定義方法,路由使用path()、re_path()或url(),通過include()整合子應用路由,需注意請求方式判斷及裝飾器限制
    2025-08-08
  • 關于jupyter代碼自動補全設置方式

    關于jupyter代碼自動補全設置方式

    這篇文章主要介紹了關于jupyter代碼自動補全設置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 一篇文章弄懂Python中所有數(shù)組數(shù)據(jù)類型

    一篇文章弄懂Python中所有數(shù)組數(shù)據(jù)類型

    這篇文章主要給大家介紹了關于Python中所有數(shù)組數(shù)據(jù)類型的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-06-06
  • pyecharts X軸標簽太長被截斷的問題及解決

    pyecharts X軸標簽太長被截斷的問題及解決

    這篇文章主要介紹了pyecharts X軸標簽太長被截斷的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • python命令行模式的用法及流程

    python命令行模式的用法及流程

    在本篇文章里小編給大家整理的是一篇關于python命令行模式的用法及流程相關內(nèi)容,有興趣的朋友們可以跟著學習下。
    2021-09-09
  • Python的Django框架中的數(shù)據(jù)庫配置指南

    Python的Django框架中的數(shù)據(jù)庫配置指南

    這篇文章主要介紹了Python的Django框架中的數(shù)據(jù)庫配置指南,文中舉了Python內(nèi)置的SQLite的示例,需要的朋友可以參考下
    2015-07-07

最新評論

托克逊县| 望谟县| 二连浩特市| 新平| 晋江市| 阜康市| 葵青区| 得荣县| 沙坪坝区| 家居| 佛冈县| 桐柏县| 定日县| 玉田县| 凤凰县| 安徽省| 江安县| 洛川县| 全椒县| 贵溪市| 霍城县| 绥棱县| 商洛市| 江门市| 类乌齐县| 山丹县| 桂林市| 高青县| 洮南市| 凤山市| 墨竹工卡县| 博罗县| 平塘县| 敖汉旗| 上林县| 宁波市| 贡觉县| 景谷| 枣强县| 徐闻县| 永昌县|