日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

高效定時任務處理:深入學習Python中APScheduler庫的奧秘

來源: 責編: 時間:2023-09-28 10:08:53 296觀看
導讀APScheduler是Python中一個強大的第三方庫,用于在后臺執行定時任務。它允許我們根據設定的時間間隔、日期規則或特定時間來執行任務,適用于定時執行腳本、定時發送郵件、定時處理數據等場景。APScheduler的功能使得在Py

APScheduler是Python中一個強大的第三方庫,用于在后臺執行定時任務。它允許我們根據設定的時間間隔、日期規則或特定時間來執行任務,適用于定時執行腳本、定時發送郵件、定時處理數據等場景。APScheduler的功能使得在Python中實現定時任務變得非常簡單和高效。本文將從入門到精通地介紹APScheduler庫的使用方法,帶你掌握在Python中實現定時任務的技巧。nCP28資訊網——每日最新資訊28at.com

nCP28資訊網——每日最新資訊28at.com

1. 安裝和導入

首先,我們需要安裝APScheduler庫。可以使用pip命令進行安裝:nCP28資訊網——每日最新資訊28at.com

pip install apscheduler

安裝完成后,我們可以在Python代碼中導入APScheduler:nCP28資訊網——每日最新資訊28at.com

from apscheduler.schedulers.background import BackgroundScheduler

2. 創建定時任務

APScheduler提供了BackgroundScheduler和BlockingScheduler兩種類型的調度器,用于創建定時任務。BackgroundScheduler在后臺運行,不會阻塞主線程;而BlockingScheduler會阻塞主線程直到所有任務完成。nCP28資訊網——每日最新資訊28at.com

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

在上述代碼中,我們首先創建了一個后臺調度器scheduler,然后定義了一個名為job的任務函數,在其中打印當前時間。使用scheduler.add_job()添加了一個定時任務,設置為每隔5秒執行一次。然后,我們啟動了調度器scheduler,讓定時任務在后臺執行。主線程等待20秒后結束,并調用scheduler.shutdown()關閉調度器。nCP28資訊網——每日最新資訊28at.com

3. 定時任務觸發器

APScheduler提供了多種觸發器類型,用于設置定時任務的觸發條件。 interval觸發器: 按照設定的時間間隔來觸發任務。nCP28資訊網——每日最新資訊28at.com

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

在上述代碼中,我們使用'interval'觸發器,設置任務每隔5秒執行一次。 cron觸發器: 使用類似于Linux中cron表達式的規則來觸發任務,可以精確到秒。nCP28資訊網——每日最新資訊28at.com

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

在上述代碼中,我們使用'cron'觸發器,設置任務每天的13點30分觸發。 date觸發器: 在指定的時間點觸發任務。nCP28資訊網——每日最新資訊28at.com

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

在上述代碼中,我們使用'date'觸發器,設置任務在2023年7月31日10點30分觸發。nCP28資訊網——每日最新資訊28at.com

4. 任務存儲

APScheduler支持將任務存儲在不同的后端存儲中,如內存、數據庫等。默認情況下,任務是存儲在內存中的。nCP28資訊網——每日最新資訊28at.com

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

在上述代碼中,我們使用默認的內存存儲來存儲任務。 如果需要將任務存儲在數據庫中,可以使用jobstores參數來設置。nCP28資訊網——每日最新資訊28at.com

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

在上述代碼中,我們使用了SQLAlchemyJobStore來將任務存儲在SQLite數據庫中。nCP28資訊網——每日最新資訊28at.com

5. 并發執行

默認情況下,APScheduler會將任務串行執行,也就是說一個任務結束后才會執行下一個任務。如果希望并發執行多個任務,可以使用max_instances參數來設置。nCP28資訊網——每日最新資訊28at.com

from apscheduler.schedulers.background import BackgroundSchedulerimport time# 創建后臺調度器scheduler = BackgroundScheduler()# 定義任務函數def job(index):    print(f"定時任務{index}執行:", time.strftime("%Y-%m-%d %H:%M:%S"))    # 添加定時任務,每隔5秒執行一次,最多并發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)# 啟動調度器scheduler.start()# 主線程等待一段時間后結束time.sleep(20)# 關閉調度器scheduler.shutdown()print("主線程結束")

在上述代碼中,我們使用了args參數傳遞參數給任務函數,并使用max_instances參數設置最多并發3個任務。nCP28資訊網——每日最新資訊28at.com

6. 阻塞和非阻塞

APScheduler提供了阻塞和非阻塞兩種調度器類型。 阻塞調度器: 在調度器啟動后,會阻塞主線程直到所有任務完成。nCP28資訊網——每日最新資訊28at.com

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

非阻塞調度器: 在調度器啟動后,不會阻塞主線程。nCP28資訊網——每日最新資訊28at.com

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

在上述代碼中,我們分別使用BlockingScheduler和BackgroundScheduler創建了阻塞和非阻塞調度器。nCP28資訊網——每日最新資訊28at.com

7. 錯誤處理

在任務執行過程中,可能會出現異常。APScheduler提供了異常處理機制,我們可以通過try...except...捕獲任務函數中的異常,并進行相應的處理。nCP28資訊網——每日最新資訊28at.com

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

在上述代碼中,我們在任務函數中拋出了一個ValueError異常,并通過try...except...捕獲并輸出了異常信息。nCP28資訊網——每日最新資訊28at.com

8. 立即執行任務

有時候我們可能需要立即執行一個任務,而不是等到下次觸發時間。APScheduler提供了run_job方法來立即執行任務。nCP28資訊網——每日最新資訊28at.com

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

在上述代碼中,我們使用scheduler.run_job(job)方法立即執行了任務。nCP28資訊網——每日最新資訊28at.com

9. 調度器持久化

在實際應用中,我們可能需要將調度器的配置保存到文件中,以便在下次啟動時恢復。nCP28資訊網——每日最新資訊28at.com

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

在上述代碼中,我們創建了一個數據庫存儲jobstores,并在創建后臺調度器時指定了jobstores參數。這樣,在調度器運行過程中,任務的配置將會被持久化到數據庫中。nCP28資訊網——每日最新資訊28at.com

10. 任務監聽器

APScheduler提供了任務監聽器,用于監聽任務的狀態變化。我們可以通過add_listener方法添加監聽器,并在任務狀態發生變化時進行相應的處理。nCP28資訊網——每日最新資訊28at.com

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

在上述代碼中,我們創建了一個任務監聽器my_listener,并在任務執行過程中通過if...else...判斷是否出現異常。然后通過scheduler.add_listener(my_listener, mask='all')方法添加了監聽器。nCP28資訊網——每日最新資訊28at.com

11. 移除定時任務

如果我們希望在調度器運行過程中移除某個定時任務,可以使用scheduler.remove_job(job_id)方法。nCP28資訊網——每日最新資訊28at.com

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

在上述代碼中,我們通過scheduler.add_job(job, 'interval', seconds=5).id獲取了定時任務的ID,并使用scheduler.remove_job(job_id)移除了定時任務。nCP28資訊網——每日最新資訊28at.com

總結

通過本文的介紹,我們學習了APScheduler庫的基本用法,包括創建定時任務、定時任務觸發器、任務存儲、并發執行、阻塞和非阻塞調度器、錯誤處理、立即執行任務、調度器持久化、任務監聽器和移除定時任務等。APScheduler為Python開發者提供了一個強大的定時任務調度框架,使得在Python中實現定時任務變得非常簡單和高效。掌握APScheduler的使用將為我們的項目和程序帶來很大的便利。nCP28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-11877-0.html高效定時任務處理:深入學習Python中APScheduler庫的奧秘

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: C++循環優化:提升性能的關鍵技巧

下一篇: 為什么寫代碼注釋應該是注釋 Why,而不是 How 和什么 What

標簽:
  • 熱門焦點
  • 7月安卓手機性能榜:紅魔8S Pro再奪榜首

    7月份的手機市場風平浪靜,除了紅魔和努比亞帶來了兩款搭載驍龍8Gen2領先版處理器的新機之外,別的也想不到有什么新品了,這也正常,通常6月7月都是手機廠商修整的時間,進入8月份之
  • 從 Pulsar Client 的原理到它的監控面板

    背景前段時間業務團隊偶爾會碰到一些 Pulsar 使用的問題,比如消息阻塞不消費了、生產者消息發送緩慢等各種問題。雖然我們有個監控頁面可以根據 topic 維度查看他的發送狀態,
  • 一篇聊聊Go錯誤封裝機制

    %w 是用于錯誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數中的一個特殊格式化動詞,用于將一個錯誤(或其他可打印的值)包裝在一個新的錯誤中。使
  • 微信語音大揭秘:為什么禁止轉發?

    大家好,我是你們的小米。今天,我要和大家聊一個有趣的話題:為什么微信語音不可以轉發?這是一個我們經常在日常使用中遇到的問題,也是一個讓很多人好奇的問題。讓我們一起來揭開這
  • 使用Webdriver-manager解決瀏覽器與驅動不匹配所帶來自動化無法執行的問題

    1、前言在我們使用 Selenium 進行 UI 自動化測試時,常常會因為瀏覽器驅動與瀏覽器版本不匹配,而導致自動化測試無法執行,需要手動去下載對應的驅動版本,并替換原有的驅動,可能還
  • 零售大模型“干中學”,攀爬數字化珠峰

    文/侯煜編輯/cc來源/華爾街科技眼對于絕大多數登山愛好者而言,攀爬珠穆朗瑪峰可謂終極目標。攀登珠峰的商業路線有兩條,一是尼泊爾境內的南坡路線,一是中國境內的北坡路線。相
  • 當家的盒馬,加速謀生

    來源 | 價值星球Planet作者 | 歸去來自己“當家”的盒馬,開始加速謀生了。據盒馬官微消息,盒馬計劃今年開放生鮮供應鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經與
  • 小米公益基金會捐贈2500萬元馳援北京、河北暴雨救災

    8月2日消息,今日小米科技創始人雷軍在其微博上發布消息稱,小米公益基金會宣布捐贈2500萬元馳援北京、河北暴雨救災。攜手抗災,京冀安康!以下為公告原文
  • 四年持續更迭堅持探索行業無人之境,HarmonyOS 4帶來五大升級多項創新

    除了華為每年新發布的旗艦手機系列,上億花粉更加期待鴻蒙系統每次的跨版本大更新。8月4日,HarmonyOS 4于HDC 2023正式發布,這也是該系統歷經四年的再
Top 主站蜘蛛池模板: 凤山市| 祁东县| 文登市| 石城县| 武安市| 汤阴县| 淮滨县| 莆田市| 交口县| 措美县| 武穴市| 肥乡县| 大埔县| 江西省| 精河县| 凤凰县| 鄂托克旗| 屏山县| 大石桥市| 汉寿县| 宝丰县| 甘孜县| 车险| 界首市| 凤阳县| 额济纳旗| 双辽市| 阿克陶县| 房山区| 若羌县| 天气| 衡山县| 玉环县| 彰化市| 新乡市| 恭城| 登封市| 武定县| 太湖县| 渭南市| 承德县|